Java中ConcurrentHashMap remove()方法
Java中的ConcurrentHashMap类的remove()方法用于从Map中删除给定键的条目。它具有以下签名:
V remove(Object key)
其中:
- key是要删除的条目的键。
- V是Map中值的类型。
- remove()方法在并发环境中工作,这意味着多个线程可以同时访问和修改ConcurrentHashMap实例,而不会出现任何数据竞争或同步问题。
当执行remove()操作时,该方法首先获得与给定键对应的Map段的锁。如果该键存在于Map中,则移除该条目并返回相应的值。如果该键不存在于Map中,则该方法只返回null。
下面是使用remove()方法的例子:
import java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args)
{
ConcurrentHashMap<String, Integer> map
= new ConcurrentHashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
map.put("Charlie", 35);
System.out.println(
map); // {Charlie=35, Bob=30, Alice=25}
Integer value = map.remove("Bob");
System.out.println("Removed value for Bob: "
+ value); // 30
System.out.println(map); // {Charlie=35, Alice=25}
value = map.remove("Dave");
System.out.println("Removed value for Dave: "
+ value); // null
System.out.println(map); // {Charlie=35, Alice=25}
}
}
输出
{Bob=30, Alice=25, Charlie=35}
Removed value for Bob: 30
{Alice=25, Charlie=35}
Removed value for Dave: null
{Alice=25, Charlie=35}
在这个例子中,我们首先创建一个ConcurrentHashMap并使用put()方法添加三个键值对。然后我们打印出Map的内容。
接下来,我们使用一个现有的键(“Bob”)执行remove()操作,将相应的条目从Map中移除。该方法返回与该键相关联的值(30),我们将其打印出来。然后我们再次打印出Map的内容,以验证“Bob”的条目已被移除。
最后,我们使用一个不存在的键(“Dave”)执行remove()操作,并打印出方法返回的值(应为null)。然后我们再次打印出Map的内容,以验证Map保持不变。
A. remove(Object key)
Java类ConcurrentHashmap的方法 remove(Object key) 用于从Map中删除映射。如果该键不存在于Map中,则此函数不执行任何操作。
语法:
public V remove(Object key)
参数:
此方法接受一个必需参数 **键** ,即需要删除的键。
返回值:
该方法返回与该键相关联的先前值,
如果没有与该键相关的映射,则返回null。
异常:
如果指定的键为null,则此方法会抛出NullPointerException。
以下是说明remove()方法的程序:
程序1:
// Java程序演示remove()方法
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()方法向映射中添加元素
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");
// 输出映射
System.out.println("映射: " + my_cmmap);
System.out.println();
// 使用remove()方法删除具有现有键6的映射
String valueRemoved = my_cmmap.remove("6");
// 删除后输出映射
System.out.println(
"删除现有键6的映射后:");
System.out.println("映射: " + my_cmmap);
System.out.println("删除的值: "
+ valueRemoved);
System.out.println();
// 使用remove()方法删除具有不存在键10的映射
valueRemoved = my_cmmap.remove("10");
// 删除后输出映射
System.out.println(
"删除不存在键10的映射后:");
System.out.println("映射: " + my_cmmap);
System.out.println("删除的值: "
+ valueRemoved);
}
}
输出结果
映射: {1=1, 2=1, 3=1, 4=1, 5=1, 6=1}
删除现有键6的映射后:
映射: {1=1, 2=1, 3=1, 4=1, 5=1}
删除的值: 1
删除不存在键10的映射后:
映射: {1=1, 2=1, 3=1, 4=1, 5=1}
删除的值: null
程序2: 演示键为空时的NullPointerException
// Java程序演示remove()方法
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()方法向映射中添加元素
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");
// 输出映射
System.out.println("映射: " + my_cmmap);
System.out.println();
try {
// 使用remove()方法删除具有空键的映射
my_cmmap.remove(null);
}
catch (Exception e) {
System.out.println("异常: " + e);
}
}
}
输出结果
映射: {1=1, 2=1, 3=1, 4=1, 5=1, 6=1}
异常: java.lang.NullPointerException
B. remove(Object key, Object value)
Java中ConcurrentHashMap类的remove(Object key, Object value)方法用于从映射中删除映射。该方法在映射中搜索具有指定的(key,value)对的映射,如果找到就删除,并返回true。如果键不存在于映射中,则此函数什么也不执行并返回false。
语法:
public boolean remove(Object key, Object value)
参数:
该方法接受两个参数
key – 要查找其所关联值的键。
value – 期望与指定键相关联的值。
返回值:
如果已移除该键值对,方法返回 true. 否则返回 false.
异常:
如果指定的键为空,该方法将抛出 NullPointerException.
请参见下面的程序,以说明remove()方法:
程序1:
// Java程序示例,演示remove()方法
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()方法将元素添加到映射中
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");
// 打印映射
System.out.println("Map: " + my_cmmap);
System.out.println();
// 使用remove()方法删除具有现有对6,1的映射
boolean valueRemoved = my_cmmap.remove("6", "1");
// 删除映射后打印映射
System.out.println(
"删除映射(6, 1)之后:");
System.out.println("Map: " + my_cmmap);
System.out.println("是否已删除值: "
+ valueRemoved);
System.out.println();
// 使用remove()方法删除不存在的配对1, 2的映射
valueRemoved = my_cmmap.remove("1", "2");
// 删除映射后打印映射
System.out.println(
"删除映射(1, 2)之后:");
System.out.println("Map: " + my_cmmap);
System.out.println("是否已删除值: "
+ valueRemoved);
}
}
输出
Map: {1=1, 2=1, 3=1, 4=1, 5=1, 6=1}
删除映射(6,1)之后:
Map: {1=1, 2=1, 3=1, 4=1, 5=1}
是否已删除值: true
删除映射(1, 2)之后:
Map: {1=1, 2=1, 3=1, 4=1, 5=1}
是否已删除值: false
程序2: 演示空键导致的NullPointerException
// Java程序示例,演示remove(key,value) null key
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()方法将元素添加到映射中
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");
// 打印映射
System.out.println("Map: " + my_cmmap);
System.out.println();
try {
// 使用remove()方法删除空键对
my_cmmap.remove(null, "1");
}
catch (Exception e) {
System.out.println("异常: " + e);
}
}
}
输出
Map: {1=1, 2=1, 3=1, 4=1, 5=1, 6=1}
异常: java.lang.NullPointerException
程序3 : 演示使用null值引起的NullPointerException。
// Java程序演示
// 删除(key,value)中出现的null值
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()方法向地图添加元素
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");
// 打印地图
System.out.println("Map: " + my_cmmap);
try {
// 使用remove()方法删除具有正确键和null值的映射
my_cmmap.remove("1", null);
my_cmmap.remove("7", null);
}
catch (Exception e) {
System.out.println("Exception: " + e);
}
}
}
输出
Map: {1=1, 2=1, 3=1, 4=1, 5=1, 6=1}
极客教程