Java中ConcurrentHashMap remove()方法

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}

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程