源码扩容及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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值