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

ConcurrentHashMap为什么这么写?
对于 ConcurrentHashMap 不允许插入 null 值的问题,有人问过ConcurrentHashMap 的作者 Doug Lea,当时他回复的消息内容里面说道:不容忍在并发场景下出现歧义,所以从线程的角度来看的话,ConcurrentHashMap是属于多线程,安全的,HashMap属于单线程,属于不安全


总结

以上就是我要提的一个小知识点,每天学习一点点,进步一点点,日积月累,积少成多,积水成河,在成为一拳超人的路上让我们一起加油吧!当然如果有遗漏的点欢迎大家评论留言,如果喜欢就点个关注吧。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

搬砖的肖傲楠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值