首页 > 其他 > 详细

集合 ArrayList

时间:2021-06-08 17:28:07      阅读:11      评论:0      收藏:0      [点我收藏+]

初次调用无参构造的时候构造一个空的{},

private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

第一次添加元素时,调用add(E e)方法,这个方法内部:

先执行ensureCapacityinternal(检测实际容量)方法 ,传入一个参数mincapcity:(size+1),

public boolean add(E e) {
ensureCapacityInternal(size + 1);
elementData[size++] = e;
return true;
}
private void ensureCapacityInternal(int minCapacity) {
if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);
}
ensureExplicitCapacity(minCapacity);
}
判断当前没有任何元素也就是空,执行初始化容量为10;执行 ensureExplicitCapacity(minCapacity);
否则视为不是第一次添加,跳过这一步, 执行ensureExplicitCapacity(minCapacity);

仍然把size+1作为参数,如果不需要扩容的话,以第一次扩容前为例,size+1总是小于defaltcapcity10比较判断为假,,不会执行扩容;
如果需要扩容,假设size=10,此时添加第11个元素需要扩容,size+1=11作为参数传入,同defaltcapcity比较判断为真,执行grow,创建一个1.5倍容量的数组并将原来的数组复制过来;

private void ensureExplicitCapacity(int minCapacity) {
modCount++;
// overflow-conscious code
if (minCapacity - elementData.length > 0)
grow(minCapacity);
}
再执行第二步骤:把e(我们需要添加的内容)赋给以size++作为下标的数组元素;
elementData[size++] = e;

集合 ArrayList

原文:https://www.cnblogs.com/msslearning/p/14862285.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!