为什么ConcurrentHashMap的key和value不能为null,map的null值处理有何限制?
- 内容介绍
- 文章标签
- 相关推荐
本文共计570个文字,预计阅读时间需要3分钟。
源码中,如果`key`或`value`为`null`,则抛出`NullPointerException`。特性上,即使`ConcurrentHashMap`也可以存储`value`为`null`的值。不论使用`HashMap`还是`ConcurrentHashMap`,调用`map.get(key)`时,如果返回了`null`,则表示那么。
源码
if (key == null || value == null) throw new NullPointerException();
二义性
假定ConcurrentHashMap也可以存放value为null的值。那不管是HashMap还是ConcurrentHashMap调用map.get(key)的时候,如果返回了null,那么这个null,
都有两重含义:
1.这个key从来没有在map中映射过。
2.这个key的value在设置的时候,就是null。
为什么map允许value=null
对于HashMap的正确使用场景是在单线程下使用。
在单线程中,当我们得到的value是null的时候,我可以用hashMap.containsKey(key)方法来区分上面说的两重含义。
所以当map.get(key)返回的值是null,在HashMap中虽然存在二义性,但是结合containsKey方法可以避免二义性。
为什么ConcurrentHashMap不允许
ConcurrentHashMap的使用场景为多线程。
本文共计570个文字,预计阅读时间需要3分钟。
源码中,如果`key`或`value`为`null`,则抛出`NullPointerException`。特性上,即使`ConcurrentHashMap`也可以存储`value`为`null`的值。不论使用`HashMap`还是`ConcurrentHashMap`,调用`map.get(key)`时,如果返回了`null`,则表示那么。
源码
if (key == null || value == null) throw new NullPointerException();
二义性
假定ConcurrentHashMap也可以存放value为null的值。那不管是HashMap还是ConcurrentHashMap调用map.get(key)的时候,如果返回了null,那么这个null,
都有两重含义:
1.这个key从来没有在map中映射过。
2.这个key的value在设置的时候,就是null。
为什么map允许value=null
对于HashMap的正确使用场景是在单线程下使用。
在单线程中,当我们得到的value是null的时候,我可以用hashMap.containsKey(key)方法来区分上面说的两重含义。
所以当map.get(key)返回的值是null,在HashMap中虽然存在二义性,但是结合containsKey方法可以避免二义性。
为什么ConcurrentHashMap不允许
ConcurrentHashMap的使用场景为多线程。

