构造方法:
- 无参
public ArrayList(){}
- 指定初始容量
public ArrayList(int){}
首先ArrayList类中定义了以下属性:
private static final int DEFAULT_CAPACITY = 10;
private static final Object[] EMPTY_ELEMENTDATA = {};
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
transient Object[] elementData;
private int size; // 实际元素的个数
在1构造方法中,将elementData初始化为DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
在2构造方法中,判断参数initialCapacity:
public boolean add(E e){}
调用ensureCapacityInternal(size+1):确保集合可以放下新元素 ---- IF elementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA // 说明是使用无参构造函数创建的集合 ---- then minCapacity = max(DEFAULT_CAPACITY,size+1) ---- then 调用ensureExplicitCapacity(minCapacity); // 申请集合空间 ---- modCount++ ---- IF minCapacity > 集合的大小 ---- then 扩容1.5倍 将新元素e放在size的位置 size++;
public void add(int index, E element){}
在指定位置index处插入元素element,使用
System.arraycopy()
将index和index之后的元素依次向后移动一个单位。public E remove(int index){}
通过
System.arraycopy()
方法,将index+1及之后的元素向前移动一个单位,并将–size处的元素置为null,便于gc回收。public boolean remove(Object o){}
o可以为null,找到index位置后,使用remove(int)相同的方式移除。