ConcurrentHashMap的JavaDoc 表示:类似Hashtable但不同HashMap,这个类就不会允许null用作键或值。我的问题:为什么?第二个问题:为什么Hashtable不允许null?我已经使用了很多HashMaps来存储数据。但是,当更改为ConcurrentHashMap时,由于NullPointerExceptions我遇到了几次麻烦。
3 回答

LEATH
TA贡献1936条经验 获得超6个赞
从ConcurrentHashMap他自己的作者(Doug Lea):
ConcurrentMaps(ConcurrentHashMaps,ConcurrentSkipListMaps)不允许使用null的主要原因是,无法容纳在非并行映射中几乎无法容忍的歧义。最主要的是,如果map.get(key)return null,则无法检测到该键是否显式映射到null该键。在非并行映射中,您可以通过进行检查 map.contains(key),但在并行映射中,两次调用之间的映射可能已更改。

DIEA
TA贡献1820条经验 获得超2个赞
Josh Bloch设计的HashMap
; 道格·李(Doug Lea)设计ConcurrentHashMap
。我希望那不是诽谤。实际上,我认为问题在于null通常需要包装,以便真正的null可以代表未初始化。如果客户代码要求空值,那么它可以支付包装空值本身的费用(非常小)。
添加回答
举报
0/150
提交
取消