源码扩容及HashMap树化

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();

你可能感兴趣的:(源码)