從 Java TreeMap 獲取同步 Map


要從 Java 中的 TreeMap 獲取同步 Map,我們可以使用 Collection 介面的內建方法“synchronizedMap()”。在這裡,TreeMap 是一個用於實現 NavigableMap 介面的類。它以樹形結構儲存對映的元素。它提供了一種有效的替代方案,以排序方式儲存鍵值對。預設情況下,TreeMap 不是同步的。在本文中,我們將解釋同步的必要性及其透過示例程式的實際實現。

來自 Tree Map 的同步 Map

TreeMap 不是執行緒安全的,這意味著當我們在多執行緒環境中實現它時,多個執行緒可以同時訪問和修改它,而無需任何協調。這可能導致資料不一致和元素的意外行為。它也可能影響操作的結果。

因此,我們需要使用“synchronizedMap()”同步對 TreeMap 元素的訪問。此方法在原始 TreeMap 周圍建立一個包裝器,並在任何執行緒嘗試訪問或修改它時鎖定它。

synchronizedMap() 是 Collections 類的靜態方法,它將 TreeMap 集合的例項作為引數,並從中返回一個同步的 Map。

語法

Collections.synchronizedMap(instanceOfTreeMap);

這裡,“Collections”是 Collection 介面的一個類。

TreeMap 的一般語法如下:

語法

TreeMap<TypeOfKey, TypeOfValue> nameOfMap = new TreeMap<>();

方法

  • 首先,匯入“java.util”包以啟用 TreeMap 類的使用。

  • 然後,建立一個 TreeMap,其中鍵的型別為 String,值的型別為 Integer。

  • 使用內建方法“put()”在集合中儲存一些元素

  • 現在,同步這些元素並將它們儲存在 Map 型別的變數中。

  • 最後,列印新的同步對映並退出。

示例 1

以下示例說明了如何使用 synchronizedMap() 同步指定的 TreeMap。

import java.util.*;
public class Maps {
   public static void main(String[] args) {
      TreeMap<String, Integer> cart = new TreeMap<>();
      // Adding elements in the cart map
      cart.put("Butter", 5);
      cart.put("Milk", 10);
      cart.put("Rice", 20);
      cart.put("Bread", 2);
      cart.put("Peanut", 2);
      // print synchronized map from TreeMap
      Map mapSynched = Collections.synchronizedMap(cart);
      System.out.println("Synchronized Map from TreeMap: " + mapSynched);
   }
}

輸出

Synchronized Map from TreeMap: {Bread=2, Butter=5, Milk=10, Peanut=2, Rice=20}

方法

  • 首先,匯入“java.util”包以啟用 TreeMap 類的使用。

  • 然後,建立一個 TreeMap,其中鍵的型別為 String,值的型別為 Integer

  • 使用內建方法“put()”在集合中儲存一些元素

  • 現在,使用 synchronizedMap() 方法同步這些元素並將它們儲存在 Map 的新集合中。

  • 最後,定義一個同步塊。在此塊內,使用“keySet()”方法獲取一個 for-each 迴圈以列印項。

示例 2

在以下示例中,我們將使用 synchronizedMap() 方法和同步塊來同步給定的 TreeMap

import java.util.*;
public class Maps {
   public static void main(String[] args) {
      TreeMap<String, Integer> cart = new TreeMap<>();
      // Adding elements in the cart map
      cart.put("Butter", 5);
      cart.put("Milk", 10);
      cart.put("Rice", 20);
      cart.put("Bread", 2);
      cart.put("Peanut", 2);
      // creating new synchronized Map
      Map<String, Integer> mapSynched = Collections.synchronizedMap(cart);
      System.out.println("Synchronized Map from TreeMap: " );
      // printing synchronized map from TreeMap
      synchronized (mapSynched) {
         for (String unKey : mapSynched.keySet()) {
            System.out.println("Item: " + unKey + ", Quantity: " +
            cart.get(unKey));
         }
      }
   }
}

輸出

Synchronized Map from TreeMap:
Item: Bread, Quantity: 2
Item: Butter, Quantity: 5
Item: Milk, Quantity: 10
Item: Peanut, Quantity: 2
Item: Rice, Quantity: 20

結論

同步是建立協調並確保兩個或多個活動之間正確通訊的過程。由於 TreeMap 不是同步的,這可能會導致資料不一致,因此我們需要對其進行同步。內建方法“Collections.synchronizedMap()”是執行此任務的更便捷的方法。

更新於: 2023-07-21

323 次檢視

啟動你的 職業生涯

透過完成課程獲得認證

開始
廣告