HashMap扩容

Posted 达内首都教学部

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashMap扩容相关的知识,希望对你有一定的参考价值。


HashMap扩容




最近有好多同学都在面试,面试官常问的关于HashMap结构之外还有HashMap的扩容方法。那么今天就给大家介绍一下HashMap是如何扩容的





对于HashMap扩容来说首先我们需要明确几个扩容需要用到的参数。

1.Capacity

HashMap的当前长度。上一期曾经说过,HashMap的长度是2的幂。

2.LoadFactor

HashMap负载因子,默认值为0.75f。



HashMap扩容


HashMap扩容


还有最重要的扩容所用的公式

1.衡量HashMap是否应扩容的条件:

HashMap.Size >= Capacity * LoadFactor

2.存储下标的方法:

index=HashCode(Key)& (Length - 1)




1.扩容

创建一个新的Entry空数组,长度是原数组的2倍。在Hash中每一次扩容都是2的倍数

2.ReHash

遍历原Entry数组,把所有的Entry重新Hash到新数组。为什么要重新Hash呢?因为长度扩大以后,Hash的规则也随之改

当原数组长度为8时,Hash运算是和111B做与运算;新数组长度为16,Hash运算是和1111B做与运算。Hash结果显然不同。

具体过程如下图:


HashMap扩容


往期精彩:

     

        

        



以上是关于HashMap扩容的主要内容,如果未能解决你的问题,请参考以下文章

HashMap的扩容机制

高薪程序员&面试题精讲系列43之HashMap扩容机制的底层实现原理,HashMap扩容后是如何进行rehash操作的?

Java HashMap的扩容

HashMap的扩容机制---resize()

hashmap多线程不安全的原因

HashMap 扩容分析