前言
大家好,我是春风。 端午节大家有出去玩吗?是否换个环境,放松下心情?
今天是端午节后上班第一天,我接着来填端午前挖下的坑啦,今天来分享一下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%。
这就是扩容因子的真正含义--发生