HashMap中的那些常量,每个都好有道理!

本文详细解析了HashMap中的关键常量设计,包括扩容因子0.75的原因,最大容量2^30的设定,以及链表长度达到8时树化和树节点数减至6时退化的策略。通过对这两个阈值的选择,HashMap平衡了空间利用率和查询效率。此外,文章还探讨了为何在树化时要求数组大小>=64,以防止过度构建红黑树。
摘要由CSDN通过智能技术生成

前言

大家好,我是春风。 端午节大家有出去玩吗?是否换个环境,放松下心情?

今天是端午节后上班第一天,我接着来填端午前挖下的坑啦,今天来分享一下hash map中的那些常量的设计,理解每个常量为什么这么设计的道理,也算是我们hash map的完结了。

一、扩容因子 0.75

首先我们看下hash map中扩容因子的作用

在putval()方法的末尾有这样一段代码:

if(++size > threshold){ resize()// 扩容 }

这里的++size即添加完元素后,当前hash map中所有元素的数量,而threshold = 扩容因子x容量。

上一节我们说过,这里的容量其实是数组table的大小,即我们有多少个桶位,(其实虽然hash map给我们提供了链表,提供了红黑树,但hashmap的初衷其实就是一个桶位存一个数,这样我们的查询的时间复杂度就才是真正的O1)。

所以理想情况下,我们的扩容因子设为0.75,也有另外一个意义就是hash map希望当我们75% 的桶位被沾满后,就进行扩容,这样当不满75%时,我们至少有25%的空间是空的,那发生碰撞的概率也就是小于75%。

这就是扩容因子的真正含义--发生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值