Java集合之ConcurrentHashMap知识点介绍

前言

在Java中,ConcurrentHashMap线程安全的集合中的Key或者Value插入 null(空) 值的会报空指针异常,但是单线程操作的HashMap又允许 Key 或者 Value 插入 null(空) 值。这到底是为什么呢?


一、代码展示

1. HashMap 插入 null 值

代码如下(示例):

@Test
    public void test(){
          
   
       System.out.println("搬砖的肖傲楠");
       HashMap<String, Object> map = new HashMap();
       // 插入 null 值
       map.put(null, null);
       if (map.containsKey(null)) {
          
   
           System.out.println("可以插入null");
       } else {
          
   
           System.out.println("不可以插入null");
       }
    }

输出如下: 结果证明:HashMap 是允许 key 或 value 插入 null 值的

1.2 ConcurrentHashMap插入null值

代码如下(示例):

/**
* @Desc:代码就修改了map的类型赋值,其他不动
*/
@Test
    public void test(){
          
   
       System.out.println("搬砖的肖傲楠");
       ConcurrentHashMap<String, Object> map = new ConcurrentHashMap<>();
       // 插入 null 值
       map.put(null, null);
       if (map.containsKey(null)) {
          
   
           System.out.println("可以插入null");
       } else {
          
   
           System.out.println("不可以插入null");
       }
    }

输出如下; 结果证明:报错了,ConcurrentHashMap不能插入 null 值,会报空指针异常

1.3 ConcurrentHashMap 源码分析

如上图所示,进入concurrentHashMap类中put方法,上面种种都有相应的提示,包括注释啊,还有方法参数前面的注解都提示了key和value不能为空,当然为了强防止为空,下一层方法中,开头就判断了传过来的参数是否为空,为空直接抛空指针异常,到这应该就很清晰了吧

1.4 Why


总结

经验分享 程序员 微信小程序 职场和发展