4. HashMap

本文详细介绍了HashMap在Java 1.7和1.8中的底层数据结构差异,包括从数组+链表到数组+(链表|红黑树)的转变。分析了链表过长时的解决策略,如缩短链表和转换为红黑树,并探讨了树化阈值设置为8的原因。此外,还讨论了HashMap的扩容机制、索引计算方式以及为何数组容量为2的n次幂等核心概念。
摘要由CSDN通过智能技术生成

image-20230104172047512

1. 底层数据结构,1.7和1.8有什么区别?

  • 1.7 数组 + 链表
  • 1.8 数组 + (链表 | 红黑树)
1.1 解决链表长度过长问题一: 缩短链表的长度

image-20230104165824931

​ 一旦数组中存储的元素个数超过了 (数组长度乘以加载因子) 的值就会进行扩容

​ 扩容有可能可以缩短链表长度,因为数组长度变了,元素哈希值对数组长度的取模就会发生变化;原来的所有数据需要重新计算哈希值对数组长度取模,重新分配到新的数组;链表的长度就有可能缩短

image-20230104165954201

​ 如果所有元素的哈希值是一样的,则说明,无论数组再怎么扩容,这些元素的哈希值对数组长度取模的值是一样的;这种情况则扩容则不能缩短链表长度提高查询效率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

糖分你俩颗~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值