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

△Hollis, 一个对Coding有着独特追求的人△

9696f34091065a57a803665988b0f341.jpeg

这是Hollis的第 420 篇原创分享

作者 l Hollis

来源 l Hollis(ID:hollischuang)

8ff99821c8b866b54cd18a9cf5f1beff.png

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

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

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

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

d56088bb1e45af65be644ca6da28a38b.png

主要意思就是说:

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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/19308.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot 多模块项目

比起传统复杂的单体工程,使用Maven的多模块配置,可以帮助项目划分模块,鼓励重用,防止POM变得过于庞大,方便某个模块的构建,而不用每次都构建整个项目,并且使得针对某个模块的特殊控制更为方便。…

Java系统环境变量配置

PATH环境变量 PATH环境变量用于保存一系列命令(可执行程序)的路径,每个路径之间以分号分隔。当在命令行窗口运行一个命令时,操作系统首先会在当前目录下查找是否存在该命令对应的可执行文件,如果未找到,操作…

模糊PID(重心法解模糊梯形图FC)

模糊PID的模糊化请参看下面的博客文章: 博途PLC模糊PID三角隶属度函数指令(含Matlab仿真)_plc 模糊pid_RXXW_Dor的博客-CSDN博客三角隶属度函数FC,我们采用兼容C99标准的函数返回值写法,在FB里调用会更加直观,下面给大家具体讲解代码。常规写法的隶属度函数FC可以参看下…

使用auto-gpt来写一篇技术文章(如何部署autogpt+遇到的问题+如何使用)

文章目录 前言一、autogpt本地部署1.clone代码2.启动虚拟环境3.运行项目 二、使用aotogpt生成文章1.人设描述2.设置目标3.文章的生成过程4.文章的生成内容 总结 前言 最近AI技术的发展非常迅猛,尤其是和GPT相关的技术,备受瞩目。近日,Autogp…

IPv6有哪些优势?

现有的互联网是在IPv4协议的基础上运行的。IPv6是下一版本的互联网协议,也可以说是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,而地址空间的不足必将妨碍互联网的进一步发展。 为…

视频创作教程-蜜蜂剪辑软件

视频创作教程-蜜蜂剪辑软件 作者介绍 一、视频剪辑软件二、蜜蜂剪辑软件使用1.视频比例选择2.添加视频素材3.视频分割4.添加文字5.转场滤镜6.其它 三、创作实例四、软件分享 作者介绍 熊文博,男,西安工程大学电子信息学院,2020级硕士研究生&…

Vue3 基础语法

文章目录 1.创建Vue项目1.1创建项目1.2 初始项目 2.vue3 语法2.1 复杂写法2.2 简易写法2.3 reactive(对象类型)2.4 ref(简单类型)2.5 computed(计算属性)2.6 watch(监听) 3.vue3 生命周期4.vue3 组件通信4.…

RabbitMQ (HelloWord 消息应答 持久化 不公平分发 预取值)

文章目录 HelloWord工作队列工作线程代码启动两个工作线程工作队列(生产者代码)工作队列(结果成功) 消息应答自动应答手动消息应答multiple的解释消息自动重新入队手动应答代码消息手动应答(生产者)消息手动…

分布式系统概念和设计——命名服务设计和落地经验

分布式系统概念和设计 通过命名服务,客户进程可以根据名字获取资源或对象的地址等属性。 被命名的实体可以是多种类型,并且可由不同的服务管理。 命名服务 命名是一个分布式系统中的非常基础的问题,名字在分布式系统中代表了广泛的资源&#…

企业官方网站怎么申请?

在数字化时代,企业官方网站是展示企业形象、宣传产品和服务的重要窗口。那么,企业官方网站怎么申请呢?下面是一些简单的步骤。 1、选择合适的网站建设平台 目前市面上有许多网站建设平台,企业需要根据自己的需求和预算选择适合自…

公司新来个卷王,让人崩溃...

最近内卷严重,各种跳槽裁员,相信很多小伙伴也在准备今年的面试计划。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必要的,它几乎涵盖了所有的软件测试技术栈,非常珍贵&#x…

电力系统储能调峰、调频模型研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

算法修炼之练气篇——练气二十一层

博主:命运之光 专栏:算法修炼之练气篇 前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的…

程序员面试金典16.*

文章目录 16.01 交换数字16.02单词频率16.03交点16.04 井字游戏16.05 阶乘尾数16.06 最小差16.07 最大数值16.08 整数的英文表示16.09 运算16.10 生存人数16.11 跳水板16.13 平分正方形16.14 最佳直线(待定)16.15珠玑妙算16.16部分排序16.17连续数列16.1…

10:00面试,10:04就出来了 ,问的实在是太...

从外包出来,没想到竟然死在了另一家厂子 自从加入这家公司,每天都在加班,钱倒是给的不少,所以我也就忍了。没想到12月一纸通知,所有人都不许加班,薪资直降30%,顿时有吃不起饭的赶脚。 好在有个…

OpenPCDet系列 | 6.PointPillars模型分类、回归、角度损失的构建

文章目录 模型损失计算1. 分类损失构建1.1 分类损失函数:SigmoidFocalClassificationLoss 2. 回归损失构建2.1 回归损失函数:WeightedSmoothL1Loss 3. 角度损失构建3.1 角度损失函数:WeightedCrossEntropyLoss 4. 总结 模型损失计算 在进行a…

如何判断CRM软件的好坏?2023年CRM系统排行榜前三名是什么?

CRM客户管理系统经过20余年的发展,收获了越来越多企业的认可,成为企业数字化转型必不可少的一环。很多企业都有上线CRM软件的计划,但精准的找到一款适合自身的产品十分不易,今天我们就来盘点2023年CRM软件排行榜。 一、CRM的含义…

【跟着陈七一起学C语言】今天总结:初识C语言

友情链接:专栏地址 知识总结顺序参考C Primer Plus(第六版)和谭浩强老师的C程序设计(第五版)等,内容以书中为标准,同时参考其它各类书籍以及优质文章,以至减少知识点上的错误&#x…

Speech and Language Processing之word2vec

1、介绍 事实证明,在每一个NLP任务中,密集向量都比稀疏向量工作得更好。虽然我们不能完全理解其中的所有原因,但我们有一些直觉。首先,密集向量可以更成功地作为特征包含在机器学习系统中;例如,如果我们使用100维…

如何高清视频录制?您只需要这样操作!

案例:如何录制画质高清的视频? 【我录制了一个视频课程,上传到网上,但是我录制的视频画质不好,影响观感。有没有支持高清录制的录屏工具?有没有小伙伴可以推荐一下!在线等!】 无论…