Redian新闻
>
美团太细了,HashMap可以存null,ConcurrentHashMap不可以,为什么?

美团太细了,HashMap可以存null,ConcurrentHashMap不可以,为什么?

公众号新闻

点击上方“芋道源码”,选择“设为星标

管她前浪,还是后浪?

能浪的浪,才是好浪!

每天 10:33 更新文章,每天掉亿点点头发...

源码精品专栏

 
来源:Hollis

我们知道,ConcurrentHashMap在使用时,和HashMap有一个比较大的区别,那就是HashMap中,null可以作为键或者值都可以。而在ConcurrentHashMap中,key和value都不允许为null。

那么,为什么呢?为啥ConcurrentHashMap要设计成这样的呢?

关于这个问题,其实最有发言权的就是ConcurrentHashMap的作者——Doug Lea。

他自己曾经出面解释过这个问题,内容如下(原文地址已经打不开了,大家将就着看一下截图吧) :


基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro
  • 视频教程:https://doc.iocoder.cn/video/

主要意思就是说:

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。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud
  • 视频教程:https://doc.iocoder.cn/video/




欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

已在知识星球更新源码解析如下:

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 4W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。

谢谢支持哟 (*^__^*)

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
Mining Company in Shanxi Concealed 43 Deaths, Says Probe ReportChina Floods: What’s the Cause, Why’s Rescue Been So Difficult?A Dozen Women Accuse Another Literary Figure of HarassmentLinux Shell 介绍:Bash、Zsh 和 Fish | Linux 中国ChatGPT能写长篇小说了,ETH提出RecurrentGPT实现交互式超长文本生成You're a sheep不是指“你是温顺的绵羊”,理解错了就尴尬了!寻找美《二》寻找美却并不见得是一种美德高志华课题组在Current Biology发文揭示小胶质细胞在调控全身麻醉中的作用及其相关分子机制咨询外企 | Accenture Account Executive 全职岗招聘中,每年28天假期The Lost Art of Chrysanthemum CultivationSpring 中 @NotEmpty、@NotBlank、@NotNull,傻傻分不清楚!第三届 冇(Mǎo)国际青年影像周 开始征片啦!太细了!这黑人的作品比小美人鱼牛一万倍,好莱坞都被他拿捏了~修复Arch Linux中的 “invalid or corrupted package (PGP signature)” 错误国际青少年创新创业大赛! International Youth Innovation&Entrepreneur Contest"美国可以,中国就不可以?"You Say - Lauren DaigleBiBo Biopharma attended the 25th SAPA-NE Annual Conference今日Nature: Ising超导体中的轨道Fulde-Ferrell-Larkin-Ovchinnikov相PKU Student Who Killed Mother Has Death Sentence UpheldHow Korea Quietly Reshaped Chinese Pop CultureHow a Controversial Play Captured Aranya’s Cultural Divide太细了!老外在针孔里搞雕塑,破吉尼斯记录,网友:感觉自己的手白长了…故事介绍:劫尸记 (The Body-Snatcher by Robert Louis Stevenson)为什么小红Mall无门槛减 $6 折扣码 “HMSQ6”,新老用户都可以,注册奖励 $5Alienware 240Hz Gaming Monitor 27 Inch Monitor with FHD (Full HDCurrent Biology | 色盲患者的希望!基因治疗适度恢复了色盲患者的色觉After the Rains, Beijing Residents Begin Counting Their Losses不要和陌生人说话, 和爱上陌生人China’s Food Security Faces a Hidden Threat: An Aging Countrysid转载:资本主义之后是什么社会Hurun China Metaverse Companies with the Greatest Potential 2023For This Rural County, Internet Fame Is About More Than Money伦敦三分之二租客认为他们的收入不足以存下买房的首付!汇率涨至9.26太细了!老外在针孔里搞雕塑,破吉尼斯记录,网友:感觉自己的手白长了……你怕死吗?为什么?
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。