猿问

为什么ConcurrentHashMap阻止空键和值?

ConcurrentHashMap的JavaDoc 表示:


类似Hashtable但不同HashMap,这个类就不会允许null用作键或值。


我的问题:为什么?


第二个问题:为什么Hashtable不允许null?


我已经使用了很多HashMaps来存储数据。但是,当更改为ConcurrentHashMap时,由于NullPointerExceptions我遇到了几次麻烦。


弑天下
浏览 1175回答 3
3回答

LEATH

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

DIEA

Josh Bloch设计的HashMap; 道格·李(Doug Lea)设计ConcurrentHashMap。我希望那不是诽谤。实际上,我认为问题在于null通常需要包装,以便真正的null可以代表未初始化。如果客户代码要求空值,那么它可以支付包装空值本身的费用(非常小)。
随时随地看视频慕课网APP

相关分类

Java
我要回答