为啥不支持key-value为null呢?
请问为什么HashTable和ConcurrentHashMap不支持key-value为null呢?
-
我的理解如下:
ConcurrentHashMap源码中 设计了key-value不能为null,null的话为抛出异常
为什么这么设计
以value为例
假设value可以为null
在高并发环境下,获取value值为null时可能有两种情况:- value 本身就为null;
- 其他线程删除了key,返回null。
在value可以为null的前提下,因为无法确定是什么因素导致了返回null,所以这种设计是有缺陷的
所以在源码设计上,需要加上value不能为null的限制,
这样如果返回null,那只能是其他线程删除key造成的了
参考了stackoverflow上的一些解答
-
看到一篇博文是这么解释的:
我没想通,觉得这个逻辑有点问题,“ConcurrentHashMap中不允许value为null”这个是结论,不能用结论作为条件来推出结论。 -
真相到底是啥呢?最近才接触,真小白,希望高人指点一波。谢谢了!!!