关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

hashmap的扩容机制

2023.7.31

hashMap 扩容机制就是重新计算容量,向 hashMap 不停地添加元素,当 hashMap 无法装载新的元素,对象将需要扩大数组容量,以便装入更多的元素。

HashMap 的扩展原理是 HashMap 用一个新的数组替换原来的数组。重新计算原数组的所有数据并插入一个新数组,然后指向新数组。如果阵列在容量扩展前已达到最大值,阈值将直接设置为最大整数返回。

HashMap 容量扩展的特性:加载因子越大,空间利用率越高,扩容前需要填充的元素越多,put 操作越快,但链表容易过长,hash 碰撞概率大,get 操作慢。加载因子越小,get 操作越快,链表越短,hash 碰撞概率低。但是,空间利用率低。put 元素太多会导致频繁扩容,影响性能。

e4dde71190ef76c6392715be8f16fdfaae5167aa?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto

HashMap 扩容可以分为三种情况:

1、使用默认构造方法初始化 HashMap。从前文可以知道 HashMap 在一开始初始化的时候会返回一个空的 table,并且 thershold 为 0。

因此第一次扩容的容量为默认值 DEFAULT_INITIAL_CAPACITY 也就是 16。同时 threshold = DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR = 12。

2、指定初始容量的构造方法初始化HashMap。那么从下面源码可以看到初始容量会等于 threshold,接着 threshold = 当前的容量(threshold)* DEFAULT_LOAD_FACTOR。

3、HashMap 不是第一次扩容。如果 HashMap 已经扩容过的话,那么每次 table 的容量以及 threshold 量为原有的两倍。


推荐
关闭