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

HashMap的底层原理

HashMap 是 Java 集合框架中最常用的数据结构之一,其底层实现结合了 数组、链表 和 红黑树,以提供高效的增删查改操作。以下是其核心实现原理的详细解析。

  1. 数据结构

数组 (Bucket Array): HashMap 使用一个数组 Node<K,V>[] table 存储键值对,每个位置称为一个“桶”。

链表 (Linked List): 当多个键的哈希值映射到同一桶时,使用链表存储冲突的键值对。

红黑树 (Red-Black Tree): 在 JDK 1.8 中,当链表长度超过 8 且数组容量 ≥ 64 时,链表会转换为红黑树以优化查询性能。

  1. 核心操作

插入 (Put)

计算哈希值: 调用 hashCode() 方法并通过 (h = key.hashCode()) ^ (h >>> 16) 进行二次处理,减少冲突。

定位桶位置: 使用 (n - 1) & hash 计算数组索引。

处理冲突: 如果桶为空,直接插入新节点。 如果存在冲突: 链表:遍历链表,若键已存在则覆盖值,否则尾插法添加节点。 红黑树:按红黑树规则插入节点。

扩容检查: 若元素数量超过阈值(capacity × loadFactor),触发扩容。

查询 (Get)

根据键计算哈希值和桶索引。

定位到对应桶: 若为空,返回 null。 若为链表或红黑树,逐一查找匹配的键。

  1. 扩容机制

当元素数量超过阈值时,创建新数组(容量为原来的两倍)。

将旧数组中的元素重新分配到新数组中,位置要么保持不变,要么移动到 i + oldCap。

  1. 优化设计

默认初始容量:16

默认负载因子:0.75

链表转红黑树阈值:8

红黑树退化为链表阈值:6
5. 使用建议

设置合理的初始容量以减少扩容次数:

Map<String, Object> map = new HashMap<>(1000 / 0.75 + 1);
复制
确保键对象不可变,并正确重写 hashCode() 和 equals() 方法。

多线程环境下使用线程安全的集合,如 ConcurrentHashMap。

http://www.jsqmd.com/news/70858/

相关文章:

  • 天猫超市卡回收主流平台推荐,这两家值得选 - 讯息观点
  • 2025年真空皮带过滤机源头厂家推荐榜单:橡胶真空过滤机‌/水平真空过滤机‌/水平带式过滤机源头厂家精选 - 品牌推荐官
  • 为你推荐:用户好评度高且评价优良的国产家用工业反渗透膜实力厂家推荐榜/生产企业公司 - 品牌推荐大师
  • 为什么销售目标越拆越细,执行力反而越差?
  • 2025年国内口碑好的8款农业无人机电池产品排行榜 - 讯息观点
  • 完整教程:多智能体框架AgentScope 1.0 深度技术剖析:架构、场景、选型与实战指南
  • 2025年大型冻干机源头厂家推荐榜单:冷冻式干燥机‌/果蔬冻干机设备‌/5平方真空冻干机源头厂家精选 - 品牌推荐官
  • GCDEX - GCD Extreme
  • 一次小脾气的发泄_2025年12月10日午餐
  • Nginx负载均衡(反向代理)——提升系统的吞吐率、请求性能、高容灾
  • 洛谷 P3706
  • 洛谷 P3706
  • 奖项
  • 创建抖音新号分享知识推广开源项目
  • 1-模型和算法
  • Nexpose 8.32.0 for Linux Windows - 漏洞扫描
  • 2025年潮州凤凰单丛茶品牌口碑推荐榜单以及全面解析 - 讯息观点
  • UniTask如何做到“零分配”
  • 如何实现 vxe-tree 树组件拖拽节点后进行二次确认提示
  • 2025年洁净室制造厂家推荐榜单:TOP10企业实力解析,谁是行业领跑者? - 深度智识库
  • 2025年12月国内市面上私有化部署定制智能体市场评测深度分析 - 品牌推荐官优选
  • 海外云主机的带宽质量对网站访问速度有多大影响?
  • 海外云主机的带宽质量对网站访问速度有多大影响?
  • CA8336/CA8345/CA8436/法国电能质量分析仪哪家好?推荐几家电能质量分析仪厂家 - 品牌推荐大师
  • CA8336/CA8345/CA8436/法国电能质量分析仪哪家好?推荐几家电能质量分析仪厂家 - 品牌推荐大师
  • 数据采集仪选购建议:GL980/GL2000/GL7000/GL260A/GL860A数据采集仪代理供应商推荐 - 品牌推荐大师
  • 数据采集仪选购建议:GL980/GL2000/GL7000/GL260A/GL860A数据采集仪代理供应商推荐 - 品牌推荐大师
  • SecureCRT SecureFX 9.7 for macOS, Linux, Windows - 跨平台的多协议终端仿真和文件传输
  • 重生之二分我再也不敢乱用 lower_bound 了 [USACO23OPEN] Milk Sum S
  • t-SNE高效使用指南与常见误区解析