参数:
private static final int DEFAULT_CAPACITY = 10;//默认初始容量
/**
* 用户指定容量为0时返回数组
*/
private static final Object[] EMPTY_ELEMENTDATA = {};
/**
* 用户调用无参构造函数,在第一次添加元素时会以DEFAULT_CAPACITY扩容
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
/**
* 保存数据,数组大小是arraylist的容量
* transient:表示对象序列化时不包括该数组(writeObject()和readObject()实现对数组序列化和反序列化)
* 原因:elementData是一个缓存数组,它通常会预留一些容量,等容量不足时再扩充容量,
* 那么有些空间可能就没有实际存储元素,采用上诉的方式来实现序列化时,
* 就可以保证只序列化实际存储的那些元素,而不是整个数组,从而节省空间和时间。
*/
transient Object[] elementData; // non-private to simplify nested class access
/**
* arraylist中实际大小(保存数据数量)
*/
private int size;
/**
* 可以分配数组的最大值
* OutOfMemoryError: 申请数组大小超过vm限制
*/
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
private static final int DEFAU