hashmap的扩容机制
hashMap 扩容机制就是重新计算容量,向 hashMap 不停地添加元素,当 hashMap 无法装载新的元素,对象将需要扩大数组容量,以便装入更多的元素。
HashMap 的扩展原理是 HashMap 用一个新的数组替换原来的数组。重新计算原数组的所有数据并插入一个新数组,然后指向新数组。如果阵列在容量扩展前已达到最大值,阈值将直接设置为最大整数返回。
HashMap 容量扩展的特性:加载因子越大,空间利用率越高,扩容前需要填充的元素越多,put 操作越快,但链表容易过长,hash 碰撞概率大,get 操作慢。加载因子越小,get 操作越快,链表越短,hash 碰撞概率低。但是,空间利用率低。put 元素太多会导致频繁扩容,影响性能。
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 量为原有的两倍。