尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
HashMap、Hashtable、ConcurrentHashMap 区别详解
在 Java 集合框架中HashMap、Hashtable、ConcurrentHashMap 都是基于哈希表实现的键值对容器三者最核心的差异集中在线程安全机制、锁粒度设计、并发性能三个维度也是 Java 并发面试的高频基础考点。本文从底层实现到特性差异逐一拆解帮你彻底理清三者的区别与选型逻辑。一、各实现详细解析1. HashMap单线程性能首选HashMap 是日常开发最常用的哈希表实现不做任何线程安全处理因此单线程环境下没有锁开销性能最高。核心特性底层结构JDK1.8 之后采用「数组 链表 / 红黑树」实现。当链表长度超过 8 且数组长度大于 64 时链表会转换为红黑树解决哈希冲突严重时的查询性能退化问题。空值支持允许最多 1 个 key 为 null允许多个 value 为 null。并发风险多线程环境下会出现数据覆盖、size 计数不准、扩容死循环JDK1.7 头插法等异常禁止在并发场景下直接使用。2. HashtableHashtable 是 JDK 早期提供的线程安全哈希表实现方式非常粗暴所有核心方法都加上 synchronized 关键字直接锁整个 Hashtable 对象。核心特性锁粒度极粗整张表只有一把锁。无论线程操作哪个位置的数据都会产生锁竞争并发性能极差。扩容开销大触发扩容时由单个线程完成全部元素的拷贝迁移过程耗时久。不支持 nullkey 和 value 都不允许为 null否则会抛出空指针异常。现状锁设计过于原始性能低下目前已经被 ConcurrentHashMap 完全替代仅作为历史遗留类存在不推荐在新代码中使用。3. ConcurrentHashMap高并发场景的最优解ConcurrentHashMap 是为并发场景设计的线程安全哈希表。以Java1.8为例彻底取消了分段锁改用更细粒度的桶级锁并做了多处优化读操作无锁读取数据时不加锁通过 volatile 关键字保证数据的内存可见性直接从主内存读取最新值。写操作锁桶仅对当前操作的哈希桶链表头结点加 synchronized 锁只有两个线程恰好操作同一个桶时才会冲突锁粒度远小于分段锁。CAS 辅助更新size 计数等属性通过 CAS 原子更新避免重量级锁。化整为零扩容扩容时新老数组同时存在每个操作哈希表的线程都会协助迁移一部分元素分散扩容开销避免单线程长时间阻塞。扩容期间插入只写入新数组查询需要同时检索新老数组全部元素迁移完成后再删除老数组。不支持 null和 Hashtable 一样禁止 null 键值。原因是并发场景下get 返回 null 无法区分「值本身是 null」还是「key 不存在」会产生语义歧义。二、核心演进逻辑锁粒度不断细化三者的性能差异本质上是锁粒度不断细化的演进过程Hashtable全表一把锁 → 所有操作都冲突性能最差ConcurrentHashMap 1.8桶级锁 → 同桶才冲突性能最优锁的粒度越细并发冲突的概率就越低高并发下的性能表现就越好。三、选型总结单线程环境优先使用 HashMap无锁开销性能最高。多线程环境使用 ConcurrentHashMap兼顾线程安全与并发性能是目前的工业标准方案。Hashtable 仅作为历史知识了解不要在新项目中使用。
RELATED

相关推荐

PostgreSQL 建了索引仍然全表扫描:1000 万行表 ANALYZE 前后的执行计划对比

PostgreSQL 建了索引仍然全表扫描:1000 万行表 ANALYZE 前后的执行计划对比

本文摘要:1000 万行表建好索引,查询仍走全表扫描,先怀疑索引往往查不到根因。用 EXPLAIN 对比 ANALYZE 前后执行计划,可看到默认选择率 0.005 如何让优化器放弃索引。 一、问题与结论 一张 orders 表 1000 万行,idx_o…

📅 2026/11/5 7:56:54
高精度计算入门与immense数据模型精讲(收官)

高精度计算入门与immense数据模型精讲(收官)

跳转链接 高精度计算入门与immense数据模型精讲(一)高精度计算入门与immense数据模型精讲(二)高精度计算入门与immense数据模型精讲(三)高精度计算入门与immense数据模型精讲(四)高…

📅 2026/11/5 7:56:54
基于multisim的双钮电子锁电路设计

基于multisim的双钮电子锁电路设计

11 双钮电子锁 设计任务: 1. 有两个按钮A和B,开锁密码可自设,如(3、5、7、9); 2. 若按B钮,则门铃响;(滴、嗒…); 3. 开锁过程:按3下A&…

📅 2026/11/5 7:51:53
MORE NEWS

更多资讯

📰

如何用AI新闻雷达Horizon打造你的专属信息过滤系统

如何用AI新闻雷达Horizon打造你的专属信息过滤系统 【免费下载链接】Horizon 📡 Your own AI-powered news radar. Generates daily briefings in English & Chinese. | 用 AI 构建你专属的新闻雷达 项目地址: https://gitcode.com/GitHub_Trending/horizon39…

📰

SuperSplat 新手排错指南:3D Gaussian Splat 编辑器常见 5 类坑一次讲清

SuperSplat 新手排错指南:3D Gaussian Splat 编辑器常见 5 类坑一次讲清 【免费下载链接】super-splat 3D Gaussian Splat Editor 项目地址: https://gitcode.com/gh_mirrors/su/super-splat 第一次把 SuperSplat 跑起来就卡住了?先别急着怀疑人生…

📰

Windows 多出一块虚拟屏:Virtual-Display-Driver 安装与配置实用清单

Windows 多出一块虚拟屏:Virtual-Display-Driver 安装与配置实用清单 【免费下载链接】Virtual-Display-Driver Add virtual monitors to your windows 10/11 device! Works with VR, OBS, Sunshine, and/or any desktop sharing software. 项目地址: https://git…

📰

【亲测免费】 探索PySceneDetect:高效视频剪辑与分割工具

探索PySceneDetect:高效视频剪辑与分割工具 【免费下载链接】PySceneDetect :movie_camera: Python and OpenCV-based scene cut/transition detection program & library. 项目地址: https://gitcode.com/GitHub_Trending/py/PySceneDetect 是一个开源的…

📰

3分钟给Windows加块虚拟显示器:Virtual-Display-Driver完整上手指南

3分钟给Windows加块虚拟显示器:Virtual-Display-Driver完整上手指南 【免费下载链接】Virtual-Display-Driver Add virtual monitors to your windows 10/11 device! Works with VR, OBS, Sunshine, and/or any desktop sharing software. 项目地址: https://gitc…

📰

中望3D草图歪斜全解析:视图与几何偏移的区分与修复

1. 草图视图歪了到底歪的是什么很多人第一次遇到这个问题时的反应是“视图转一下不就行了”,结果鼠标中键按住转了三百六十度,草图还是斜的,标注尺寸也跟着歪,最后画出来的线全是斜的。这里得先把一个概念掰清楚:中望3…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬