ArrayList 初始容量与扩容

本文探讨了ArrayList的初始容量和扩容策略。当新建ArrayList且未指定容量时,默认初始容量为0。首次添加元素时,ArrayList会扩容至10。随着元素增加,当容量不足时,ArrayList将按照当前容量的1.5倍进行扩容,例如从10扩容至15。这种扩容机制保证了ArrayList在增长时的效率。
摘要由CSDN通过智能技术生成

众所周知,ArrayList的底层是数组,那么ArrayList的数组容量到底是多少呢?

首先,先new一个ArrayList,然后向集合中添加11个元素,至于为什么是11个,下面再说。

然后我们debug一点一点来看:

我们看到,在执行ArrayList的空参构造的时候,执行了一段代码,那么这段代码表示什么什么含义呢?

可以看到在ArrayList类中定义了两个成员变量,通过注释我们可以知道elementData表示数组缓冲区,而DEFAULTCAPACITY_EMPTY_ELEMENTDATA 是当ArrayList类加载的时候创建的一个空数组,此时把该空数组赋值给数组缓冲区。所以我们可以知道初始化一个ArrayList集合,如果没有指定容量的时候,默认初始容量为0。

接着,我们向集合中添加第一个元素。

进入到add()方法,看到会首先执行ensureCapacityInternal(size + 1),size是ArrayList的成员变量,表示集合的大小,继续跟进ensureCapacityInternal方法,

因为此时数组缓冲区为空,所以会为minCapacity进行赋值,可以看到默认容量为10,继续跟进ensureExplicitCapacity()方法,

这里首先对当前集合的修改次数进行累加,上一步对minCapacity进行了赋值,可以看到当最小容量大于数组缓冲区的大小时,就会去执行grow()方法,继续跟进,

到了这里我们终于找到了对集合进行扩容的地方,可以看出,先是获取了数组缓冲区的长度赋给了oldCapacity

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值