全球观点:美团太细了,HashMap可以存Null,ConcurrentHashMap不可以,为什么?
ConcurrentMap(如ConcurrentHashMap、ConcurrentSkipListMap)不允许使用Null值的主要原因是,在非并发的Map中(如HashMap),是可以容忍模糊性(二义性)的,而在并发Map中是无法容忍的。
我们知道,ConcurrentHashMap在使用时,和HashMap有一个比较大的区别,那就是HashMap中,null可以作为键或者值都可以。而在ConcurrentHashMap中,key和value都不允许为null。
(资料图)
那么,为什么呢?为啥ConcurrentHashMap要设计成这样的呢?
关于这个问题,其实最有发言权的就是ConcurrentHashMap的作者——Doug Lea。
他自己曾经出面解释过这个问题,内容如下(原文地址已经打不开了,大家将就着看一下截图吧) :
主要意思就是说:
ConcurrentMap(如ConcurrentHashMap、ConcurrentSkipListMap)不允许使用null值的主要原因是,在非并发的Map中(如HashMap),是可以容忍模糊性(二义性)的,而在并发Map中是无法容忍的。
假如说,所有的Map都支持null的话,那么map.get(key)就可以返回null,但是,这时候就会存在一个不确定性,当你拿到null的时候,你是不知道他是因为本来就存了一个null进去还是说就是因为没找到而返回了null。
在HashMap中,因为它的设计就是给单线程用的,所以当我们map.get(key)返回null的时候,我们是可以通过map.contains(key)检查来进行检测的,如果它返回true,则认为是存了一个null,否则就是因为没找到而返回了null。
但是,像ConcurrentHashMap,它是为并发而生的,它是要用在并发场景中的,当我们map.get(key)返回null的时候,是没办法通过通过map.contains(key)检查来准确的检测,因为在检测过程中可能会被其他线程锁修改,而导致检测结果并不可靠。
所以,为了让ConcurrentHashMap的语义更加准确,不存在二义性的问题,他就不支持null。
关键词:
相关新闻
- 全球观点:美团太细了,HashMap可以存Null,ConcurrentHashMap不可以,为什么?
- 有色铬龙头股全名单出炉了(2023/5/9)|焦点播报
- 2023重庆武隆520犀牛寨土家族集体婚礼活动时间+报名方式
- 河南省建立15处典型古生物化石群落 发现8000余处化石点
- 热点!南宁市总工会举办2022年度“南宁工匠”主题展
- 今日讯!变形计王逗逗在哪一期_变形计王逗逗是在哪一期
- 通勤距离多少公里,适合骑行上班? 世界热资讯
- 每日聚焦:国光股份:预计未来毛利率将继续改善
- 岩泉别诸弟 环球播资讯
- 季羡林散文选集|世界快播
- 广州珠江职业技术学院学前教育专业群人才培养模式与创新之一:“园长实验班”-热门
- 研究发现,AI聊天机器人可以改善在线政治辩论
- 【世界新要闻】科里奥利力原理_科里奥利
- 【光明时评】护航“良田粮用”“粮田良用” 观速讯
- 最新:5月9日福建地区氢氟酸市场价格暂稳
- 环球观点:新安县樱桃沟:乡野艺术化 振兴更添彩
- 超半数老板退场,京城汉服体验馆“撇泡沫”
- 河南省16名高技能人才获评最高政府奖_时快讯
- 闪崩16%!又一巨头爆雷!苹果又有大动作
- 云岭大地上的特勤尖兵
- @太原人 花式文创产品定格城市记忆 速来观展!展至5月12日-环球微速讯
- 天天热点!变化多端的端是什么意思怎么解释_变化多端的端是什么意思
- 魔兽世界矿产分布图_魔兽世界矿点分布图
- 墙倒众人推 破鼓万人捶 树倒猢狲散_墙倒众人推
