ArrayList扩容机制总结

本文深入探讨了Java集合框架中扩容操作的关键细节。当add()导致需要扩容时,minCapacity为当前size加1。如果扩容后的容量newCapacity超过数组长度,并且newCapacity大于MAX_ARRAY_SIZE,那么容量会根据MAX_ARRAY_SIZE进行调整。如果newCapacity小于minCapacity,那么将按minCapacity进行扩容。整个过程确保了数组容量的合理增长并防止溢出问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以add()触发的扩容为例:

minCapacity为size+1

1.如果minCapacity>数组长度elementData.length,进行grow()扩容
在这里插入图片描述

在这里插入图片描述
扩容后数组长度:newCapacity = elementData.length*1.5
数组最大长度:MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8
2.如果newCapacity>minCapacity,说明扩容后的长度大于所需要的长度
并且newCapacity>MAX_ARRAY_SIZE
在这里插入图片描述
如果minCapacity<MAX_ARRAY_SIZE
则newCapacity取MAX_ARRAY_SIZE
否则取Integer.MAX_VALUE
这里的大概意思就是,如果你扩容后的长度大于所需的长度并且所需的长度小于MAX_ARRAY_SIZE,那么扩容后的长度取MAX_ARRAY_SIZE,否则取Integer.MAX_VALUE

3.如果newCapacity<minCapacity,说明扩容后的长度小于所需要的长度
那么令newCapacity = minCapacity,也就是令扩容长度为所需长度
如果newCapacity >MAX_ARRAY_SIZE,也就是说扩容长度大于MAX_ARRAY_SIZE
令newCapacity = Integer.MAX_VALUE
这里的大概意思就是,如果所需长度大于扩容长度,那么令扩容长度等于所需长度,如果所需长度大于MAX_ARRAY_SIZE,那么令扩容长度等于 Integer.MAX_VALUE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值