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
总结
下一篇:
互联网公司社招还会问算法题么?