当前位置: 首页 > news >正文

每日一面系列之美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以

ConcurrentHashMap 为什么 key 和 value 不能为 null?

ConcurrentHashMap 的 key 和 value 不能为 null 主要是为了避免二义性。null 是一个特殊的值,表示没有对象或没有引用。如果你用 null 作为键,那么你就无法区分这个键是否存在于 ConcurrentHashMap 中,还是根本没有这个键。同样,如果你用 null 作为值,那么你就无法区分这个值是否是真正存储在 ConcurrentHashMap 中的,还是因为找不到对应的键而返回的。

拿 get 方法取值来说,返回的结果为 null 存在两种情况:

  • 值没有在集合中 ;
  • 值本身就是 null。

这也就是二义性的由来。

具体可以参考 ConcurrentHashMap 源码分析 。

多线程环境下,存在一个线程操作该 ConcurrentHashMap 时,其他的线程将该 ConcurrentHashMap 修改的情况,所以无法通过 containsKey(key) 来判断否存在这个键值对,也就没办法解决二义性问题了。

与此形成对比的是,HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个。如果传入 null 作为参数,就会返回 hash 值为 0 的位置的值。单线程环境下,不存在一个线程操作该 HashMap 时,其他的线程将该 HashMap 修改的情况,所以可以通过 contains(key)来做判断是否存在这个键值对,从而做相应的处理,也就不存在二义性问题。

也就是说,多线程下无法正确判定键值对是否存在(存在其他线程修改的情况),单线程是可以的(不存在其他线程修改的情况)。

如果你确实需要在 ConcurrentHashMap 中使用 null 的话,可以使用一个特殊的静态空对象来代替 null。

参考资料:
每日一面系列之美团面试拷打:ConcurrentHashMap 为何不能插入 null?HashMap 为何可以_concurrenthashmap的null的容忍度是什么意思-CSDN博客文章浏览阅读219次。下面我会以此提供这两个问题的详细答案,希望对你有帮助。_concurrenthashmap的null的容忍度是什么意思https://blog.csdn.net/mclongyi/article/details/133013093

关于ConcurrentHashMap的键值不为null的见解。_concurrenthashmap key不能为null-CSDN博客文章浏览阅读822次,点赞20次,收藏5次。关于ConcurrentHashMap的key,value设计为不能是null的原因_concurrenthashmap key不能为nullhttps://blog.csdn.net/qq_43429633/article/details/137725602 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从零开始写一个微信小程序
  • 深度学习------------丢弃法dropout
  • Python爬虫技术 第29节 实战案例分析
  • 【Golang】清理Markdown未引用图片
  • PHP如何实现登录认证和鉴权
  • 【Rust光年纪】解锁 Rust 库新姿势:抽象语法树、代码生成与宏处理全解析
  • Qt文件读写
  • 实战:ElasticSearch 索引操作命令(补充)
  • day18 Java流程控制——Scanner进阶使用
  • C++20三向比较运算符详解
  • 你的网站访客来自何方?GoAccess地理分析工具告诉你!
  • 图像生成中图像质量评估指标—FID介绍
  • C#的#define #if用法
  • 《C语言程序设计 第4版》笔记和代码 第十三章 文件操作
  • 二百五十四、OceanBase——Linux上安装OceanBase数据库(四):登录ocp-express,配置租户管理等信息
  • 《Java编程思想》读书笔记-对象导论
  • co.js - 让异步代码同步化
  • css的样式优先级
  • css选择器
  • Essential Studio for ASP.NET Web Forms 2017 v2,新增自定义树形网格工具栏
  • Java方法详解
  • Next.js之基础概念(二)
  • oldjun 检测网站的经验
  • Redash本地开发环境搭建
  • 服务器从安装到部署全过程(二)
  • 构建工具 - 收藏集 - 掘金
  • 简单易用的leetcode开发测试工具(npm)
  • 马上搞懂 GeoJSON
  • 面试遇到的一些题
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • puppet连载22:define用法
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (二)windows配置JDK环境
  • (分类)KNN算法- 参数调优
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (推荐)叮当——中文语音对话机器人
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET设计模式(2):单件模式(Singleton Pattern)
  • .NET性能优化(文摘)
  • @SpringBootApplication 注解
  • [AI资讯·0612] AI测试高考物理题,最高准确率100%,OpenAI与苹果合作,将ChatGPT融入系统中,大模型在物理领域应用潜力显现
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [Angular] 笔记 18:Angular Router
  • [C/C++入门][字符与ASCII码]6、用代码来转换字符与它的ASCII码
  • [Cloud Networking] Layer3 (Continue)