public class ArrayList<E>{ private static final int DEFAULT_CAPACITY = 10;//默认的容量是10 private static final Object[] EMPTY_ELEMENTDATA = {};//长度为空的时候的数组,不可变的 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};//默认长度的空数组 transient Obj…
初始化:有三种方式 1.默认的构造器,将会以默认的大小来初始化内部的数组:public ArrayList(); 2.用一个ICollection对象来构造,并将该集合的元素添加到ArrayList: public ArrayList(Collection<? extends E> c) 3.用指定的大小来初始化内部的数组: public ArrayList(int initialCapacity) 下面我们来重点关注一下无参数构造器的实现过程: 通过代码可是它的初始容量为0.而在之前JD…
动态扩容 1.add(E e)方法中 ① ensureCapacityInternal(size+1),确保内部容量,size是添加前数组内元素的数量 ② elementData[size++] = e 添加元素到相应位置,元素数量加1 2. ensureCapacityInternal(size+1)确保内部容量 ① 计算最小需要空间(如果传入的是个空数组则最小容量取默认容量与minCapacity之间的最大值) ② 判断是否需要扩容(如果最小需要空间比elementData的内存空间要…