HashMap学习整理与记录

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

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

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

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值