Java 从TreeMap获取同步Map

Java 从TreeMap获取同步Map

要从Java的TreeMap中获取同步Map,我们可以使用Collection接口的内置方法’synchronizedMap()’。在这里,TreeMap是使用NavigableMap接口来实现的类。它以树形结构存储地图的元素。它提供了一种有效的方法来按排序顺序存储键值对。默认情况下,TreeMap不是同步的。在本文中,我们将通过示例程序解释同步的需求以及其实际实现。

从TreeMap获取同步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的新集合中。

  • 最后,定义一个同步块。在此块中,使用for-each循环使用‘keySet()’方法打印项目。

示例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()’是执行此任务的更方便的方式。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程