java集合之ArrayList扩容机制

本文详细探讨了ArrayList在调用add方法时的扩容过程。首先,calculateCapacity方法会判断是否为空并确定初始容量。接着,当容量不足时,通过ensureExplicitCapacity方法进行扩容判断,并在必要时调用grow方法。grow方法根据旧容量进行1.5倍扩容,特殊情况会调整为指定最小容量或最大值。整个过程确保了ArrayList的高效内存管理。
摘要由CSDN通过智能技术生成

 

ArrayList 调用add的时候,会进入 

ensureCapacityInternal方法

 

calculateCapacity方法会首先会判断是否是当前数组对象是不是空的,如果是的话会返回 默认大小10和当前最小需要大小的最大值,如果不是空的话直接返回当前数组最小需要的值。

上面的返回值会传入ensureExplicitCapacity方法,modCount是记录当前修改的个数,下面判断如果当前需要的最小值比数组实际的长度大的时候(也即不能满足装载需求的时候),此时就调用扩容方法,grow。

对于grow方法,首先会获取 oldCapacity的值,newCapacity的值位运算为old的1.5倍,如果第一次的时候old为0,此时将new赋值为minCapacity,也即为10,如果old大于 Integer.MAX_VALUE - 8,此时直接扩容为最大值,否则调用Arrays.copyOf的扩容方法进行扩容。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值