Java8 HashMap 源码分析

    科技2025-07-28  13

    Java8 HashMap 源码分析

    JDK 1.6 1.7 HashMap 采用的是 数组+链表的形式, 每个桶对应不同的 hash 值,根据 key 计算得到的 hash,将键值对存放到对于的位置。

    hashMap 的键值都可以为 null ,每个桶又是链表的形式是存放的。

    但是当一个桶中链表的元素变多,通过 key 值依次查找的效率会变低,因此 HashMap 采用的是 桶+链表/红黑树的方式实现。 当链表长度超过 8 时,将链表转换为红黑树,大大减少查找时间。

    HashMap 结构

    底层实现

    Hash 表的结果是数组(桶)+单链表+红黑树。 不同的 key 计算出的 hash 值可能相同,会造成 hash 冲突, hashmap 是不允许相同的 key, 当链表过长是,会造成访问速度降低,性能下降问题,黑客可以抓住这个特点进行攻击,让服务器处于繁忙状态, 引入红黑树,可以提高访问效率。

    /** * The table, initialized on first use, and resized as wangxiaoming 认证博客专家 架构 Spring Boot Redis 博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
    Processed: 0.013, SQL: 8