HashMap学习整理与记录

本文详细探讨了HashMap的数据结构,包括1.8之前的链表+数组和1.8之后引入的红黑树。分析了为何添加红黑树以提高查询效率,并解释了转化为红黑树的条件。同时,讨论了HashMap的初始化、扩容机制以及计算索引的方法,强调了容量为2的n次幂的原因。此外,还阐述了负载因子的作用和扩容策略,以及构造函数中+1.0F的目的,旨在优化HashMap的性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

HashMap是由什么数据结构组成?

答:在1.8之前,HashMap是由链表+数组组成,而在1.8之后HashMap增加了红黑树,也就是由链表+数组+红黑树组成。

HashMap为什么要添加红黑树这种数据结构在底层?

答:首先HashMap为了均匀的存储数据,就会使用到更好的HashCode算法去计算索引值,而再怎么好的HashCode算法也会造成有时候哈希冲突过多,链表存储的数据过多造成链表过长。而要知道链表的查询时间复杂度为O(n),过长时就会导致HashMap的查询性能降低,而HashMap的优势就体现不出来了。那么为了优化HashMap,即出现了红黑树,而红黑树的查询时间复杂度为O(logn),这样查询的效率就会大幅度提升。

那么变为红黑树的条件是什么呢?

答:HashMap需要数组长度大于64且链表长度大于8

那么如果出现以下情况:数组长度为32,但是链表大于8该怎么办?

答:出现以下情况,并不会将链表转为红黑树,因为不满足转成红黑树的条件,所以则会选择扩容resize();直到达到转树的条件才转成红黑树。

为什么会有这个转为树的条件?

答:HashMap的底层源码中定义了阈值为8,当大于8且定义了数组table的长度必须得为64。这是因为树所占用的内存是链表的2倍,所以虽然树的查询速度快,但是它所占的内存要多。在底层源码中,在随机哈希码下,树箱中的节点服从泊松分布,即树箱获得第一个元素的概率为0.6几,第二个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值