为了账号安全,请及时绑定邮箱和手机立即绑定

为什么ConcurrentHashMap阻止空键和值?

为什么ConcurrentHashMap阻止空键和值?

弑天下 2019-10-25 15:24:42
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),但在并行映射中,两次调用之间的映射可能已更改。


查看完整回答
反对 回复 2019-10-25
?
DIEA

TA贡献1820条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-10-25
  • 3 回答
  • 0 关注
  • 1174 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信