HashMap扩容
Posted 达内首都教学部
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashMap扩容相关的知识,希望对你有一定的参考价值。
HashMap扩容
最近有好多同学都在面试,面试官常问的关于HashMap结构之外还有HashMap的扩容方法。那么今天就给大家介绍一下HashMap是如何扩容的
对于HashMap扩容来说首先我们需要明确几个扩容需要用到的参数。
1.Capacity
HashMap的当前长度。上一期曾经说过,HashMap的长度是2的幂。
2.LoadFactor
HashMap负载因子,默认值为0.75f。
还有最重要的扩容所用的公式:
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扩容的主要内容,如果未能解决你的问题,请参考以下文章
高薪程序员&面试题精讲系列43之HashMap扩容机制的底层实现原理,HashMap扩容后是如何进行rehash操作的?