1 new ArrayList() 时,将内部DEFAULTCAPACITY_EMPTY_ELEMENTDATA赋值给 elmentData数组。
2 add(E e)时,调用ensureCapacityInternal(size +1),此时size 为0,minCapacity为10,(DEFAULT_CAPACITY为10,取DEFAULT_CAPACITY和minCapacity之间最大值)。
modCount++;如果minCapacity > 当前elementData.length,调用grow(minCapacity) int oldCapacity = elementData.length; int newCapacity = oldCapacity + (oldCapacity >> 1); 即 新容量是旧容量1.5倍, elementData = Arrays.copyOf(elementData, newCapacity);
elementData[size++] = e;
3 size() 直接返回size
4 contains(E e) 返回 indexOf(e )>=0
5 indexOf(E e) 先判断e是否为null,遍历elementData,返回第一个等于e(null)的index,没有返回-1
6 remove(int index) 先rangeCheck(index),如果index>size 抛IndexOutOfBoundsException
modCount++;
取到index对应元素,通过System.arraycopy将index后面的元素前移一位,将size前一个元素赋值为null,
返回删除的对象
7 lastIndexOf(Object o) indexOf的倒序实现,从后向前比对。
8 clear()
modCount++;
// clear to let GC do its work
for (int i = 0; i < size; i++)
elementData[i] = null;
size = 0;