Arraylist动态扩容

JDK1.7环境

1、构造参数

ArrayList() 

ArrayList(int initialCapacity)  用指定的大小来初始化内部的数组

ArrayList(Collection<? extends E> c)用一个ICollection对象来构造,并将该集合的元素添加到ArrayList

2、ArrayList() 

ArrayList list = new ArrayList<String>();

总结:初始数组容量为10,每次通过copeOf的方式扩容,后容量为原来的1.5倍

 

源码:

只是把elementData对象数组初始化了一个空对象数组。

elementData:存储ArrayList元素的数组缓冲区。ArrayList的容量是此数组缓冲区的长度。所以此时ArrayList容量为0;

 

当执行list.add()方法时,ArrayList才初始化有大小容量数组

 

第一次调用add()时,elementData == EMPTY_ELEMENTDATA会相等,并且值都是空数组。

第一次调用minCapacity=1,

minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);取值是获取DEFAULT_CAPACITY 的值

在ensureExplicitCapacity方法中,第一次add()方法,此时minCapacity= 10,elementData.length=1,

所以不会进入grow()方法。

当minCapacity大于10,会执行grow()进行扩容计算,

例如:

向数组中添加到第11个元素时,数组容量扩为15. 

int  newCapacity =  10 +  (10 >> 1) = 15

      向数组中添加到第16个元素时,数组容量扩为22.

int  newCapacity =  15+  (15>> 1) = 22

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2014Team

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值