为什么ConcurrentHashMap中的key和value不允许为null?

问题引出:打开ConcurrentHashMap的源码,可以看到这样一段代码:
在这里插入图片描述

如果key或者value为null,则会抛出一个空指针异常,但是为什么ConcurrentHashMap不允许key或者value为null呢?

考察目标:从ConcurrentHashMap的设计角度回答

回答:
①ConcurrentHashMap中的key和value不允许为null,是为了避免在多线程环境下出现歧义问题,所谓歧义问题,就是说一个线程从ConcurrentHashMap里面去获取key的时候,如果返回的结果是null,那么这个线程无法判断null表示的是确实不存在这个key,还是存在这个key但value为null
②这种不确定性可以认为是线程安全性问题,而ConcurrentHashMap又是一个线程安全的集合,它是给多线程用的,所以自然不允许key或者value为null。而HashMap中允许为null,因为它不需要考虑线程安全性问题,它是给单线程用的。

你可能感兴趣的:(Java,java)