Java中的ConcurrentHashMap put()方法
在Java中,ConcurrentHashMap类中的put()方法用于在映射中将给定值与给定键关联。其具有以下签名:
V put(K key, V value)
其中:
- K是映射中键的类型。
- V是映射中值的类型。
- key是要与给定值关联的键。
- value是要与给定键关联的值。
- put()方法在并发环境下工作,这意味着多个线程可以同时访问和修改concurrentHashMap实例,而不会出现任何数据竞争或同步问题。
执行put()操作时,该方法首先在对应于给定键的映射段上获取锁。如果该键已经存在于映射中,则将键关联的旧值替换为新值。如果该键不存在于映射中,则添加一个新条目,具有给定的键值对。
put()方法返回与给定键关联的先前值,如果该键之前没有映射,则返回null。如果您不需要先前的值,则可以忽略返回值。
// Java program to demonstrate
// put() method
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args)
{
// Creating ConcurrentHashMap
Map<String, String> my_cmmap
= new ConcurrentHashMap<String, String>();
// Adding elements to the map
// using put() method
my_cmmap.put("1", "1");
my_cmmap.put("2", "1");
my_cmmap.put("3", "1");
my_cmmap.put("4", "1");
my_cmmap.put("5", "1");
my_cmmap.put("6", "1");
// Printing the map
System.out.print(my_cmmap);
}
}
输出
{Bob=30, Alice=25, Charlie=35}
Old value for Bob: 30
{Bob=40, Alice=25, Charlie=35}
New value for Dave: null
{Bob=40, Alice=25, Charlie=35, Dave=45}
ConcurrentHashMap类中的put()方法用于将映射插入此映射。它将参数作为(Key, Value)对。如果传递了一个现有的键和值,则该方法更新该键的值。否则,如果传递了一个新的对,那么整个对都将被插入。
语法:
public V put(K key, V value)
参数: 该方法接受两个必需参数:
- key: 与指定值关联的键。
- value: 要与指定键关联的值。
返回值: 该方法返回与键关联的先前值,如果键之前没有映射,则返回null。
异常: 如果指定的键或值为null,则此方法会抛出NullPointerException。以下是说明put()方法的示例:
程序1: 当传递的键和值是新的时。
// 展示使用 put() 方法的 Java 程序
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args)
{
// 创建 ConcurrentHashMap
Map<String, String> my_cmmap
= new ConcurrentHashMap<String, String>();
// 使用 put() 方法向 map 中添加元素
my_cmmap.put("1", "1");
my_cmmap.put("2", "1");
my_cmmap.put("3", "1");
my_cmmap.put("4", "1");
my_cmmap.put("5", "1");
my_cmmap.put("6", "1");
// 打印 map
System.out.print(my_cmmap);
}
}
输出
{1=1, 2=1, 3=1, 4=1, 5=1, 6=1}
程序 2: 传递已存在 Key、Value。
// 展示使用 put() 方法的 Java 程序
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args)
{
// 创建 ConcurrentHashMap
Map<String, String> my_map
= new ConcurrentHashMap<String, String>();
// 变量获取 put() 返回的值
String returnedValue;
// 使用 put() 方法向 map 中添加元素,并每次打印返回值
returnedValue = my_map.put("Geek", "100");
System.out.println("Map: " + my_map);
System.out.println("Returned Value: "
+ returnedValue);
System.out.println();
returnedValue = my_map.put("Geek", "200");
System.out.println("Map: " + my_map);
System.out.println("Returned Value: "
+ returnedValue);
System.out.println();
returnedValue = my_map.put("Geek", "300");
System.out.println("Map: " + my_map);
System.out.println("Returned Value: "
+ returnedValue);
System.out.println();
returnedValue = my_map.put("Geek", "400");
System.out.println("Map: " + my_map);
System.out.println("Returned Value: "
+ returnedValue);
System.out.println();
returnedValue = my_map.put("Geek", "500");
System.out.println("Map: " + my_map);
System.out.println("Returned Value: "
+ returnedValue);
System.out.println();
System.out.print(my_map);
}
}
输出
Map: {Geek=100}
Returned Value: null
Map: {Geek=200}
Returned Value: 100
Map: {Geek=300}
Returned Value: 200
Map: {Geek=400}
Returned Value: 300
Map: {Geek=500}
Returned Value: 400
{Geek=500}
程序 3: 展示 NullPointerException
// Java程序演示
// put() 方法
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args)
{
// 创建ConcurrentHashMap
Map<String, String> my_cmmap
= new ConcurrentHashMap<String, String>();
// 使用put()方法向map中添加元素
my_cmmap.put("1", "1");
my_cmmap.put("2", "1");
my_cmmap.put("3", "1");
my_cmmap.put("4", "1");
my_cmmap.put("5", "1");
my_cmmap.put("6", "1");
// 打印map
System.out.println(my_cmmap + "\n");
// 当空键被传递时
try {
System.out.println("当参数为(null, \"10\")时:");
my_cmmap.put(null, "10");
}
catch (Exception e) {
System.out.println("异常:" + e + "\n");
}
// 当空值被传递时
try {
System.out.println("当参数为(\"10\", null)时:");
my_cmmap.put("10", null);
}
catch (Exception e) {
System.out.println("异常:" + e + "\n");
}
}
}
输出结果
{1=1, 2=1, 3=1, 4=1, 5=1, 6=1}
当参数为(null, "10")时:
异常:java.lang.NullPointerException
当参数为("10", null)时:
异常:java.lang.NullPointerException
极客教程