arraylist扩容机制

没有指定list大小:0→10→15→22(×1.5以此类推)

指定list大小:指定大小×1.5

 2.使用无参构造器的扩容

进入后可以看到elementData是个空数组 

往list里面增加数据

调用add方法

ensureCapacityInternal先去确定容量够不够

再把e放进去elementData下标为size的位置,注意这里是先放进size后size再+1

size此时是0

 

 minCapacity就是size+1=1,DEFAULT_CAPACITY是提前设置好的常量为10

这里DEFAULT_CAPACITY和minCapacity比较大小,谁大谁新赋值给minCapacity

所以minCapacity值变成了10

接着调用ensureExplicitCapacity方法

 

 ensureExplicitCapacity方法

modCount记录集合被修改的次数(多线程安全问题)

elementData是当前创造集合的空间,因为是空集合,所以为0

minCapacity是需要的最小的集合容量

这里minCapacity大于elementData表示当前创造集合的空间不够了,需要扩容,所以会调用grow方法

 grow是扩容的具体操作

 

最后回到add方法里的elementData【size++】=e,开始再集合内添加数据 

 3.使用有参构造器的扩容

 直接生成一个初始化为8的集合

后面步骤与无参基本一致

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值