Java8 HashMap 源码分析

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 CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页
实付 19.89元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值