HashMap基本参数
对于HashMap初始容量为16
负载因子为0.75
最小树化长度为64
HashMap的扩容和树化
当前链表的长度大于8时进行树化,转化为红黑树,进入树化方法则会发现,树化之前会先进性判断,数组的长度如果小于64则会先进行扩容。扩容的方式就是创建新的数组(数组长度并不能变),将老元素重新添加到新的数组中。
for (int binCount = 0; ; ++binCount) {
if ((e = p.next) == null) {
p.next = newNode(hash, key, value, null);
if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
treeifyBin(tab, hash);
break;
}
进入treeifyBin树化方法会发现,数组新进行扩容判断,不可扩容才树化。
//首先判断是否超过最小树化长度64(下标从0开始)
if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st
treeifyBin(tab, hash);
//小于则进行扩容 ,将数组扩容到64
if (tab == null || (n = tab.length) < MIN_TREEIFY_CAPACITY)
resize();