ArrayList源码分析-成员变量
// 默认初始的容量(CAPACITY)
private static final int DEFAULT CAPACITY= 10;
// 用于空实例的共享空数组实例
private static final Object] EMPTY ELEMENTDATA = {};
// 用于默认大小的空实例的共享空数组实例。
// 我们将其与 EMPTY_ELEMENTDATA 区分开来,以了解添加第一个元素时要膨胀多少
private static final Object[] DEFAULTCAPACITY_EMPTY ELEMENTDATA = {};
/**存储 ArrayList 元素的数组缓冲区。ArrayList 的容量就是这个数组缓冲区的长度。
*当添加第一个元素时,任何具有 elemenData == DEFAULTCAPACITY EMPTY_ELEMENTDATA 的空 ArrayList
*都将护展为 DEFAULT CAPACITY*当前对象不参与序列化
*/
transient Object[] elementData;
// ArrayList 的大小(它包含的元素数量)
private int size;
❒ 数组初始化方法有三个
✔ 第一:指定数组长度
✔ 第二:无参构造函数
✔ 第三:参数是一个线性集合
❒ 数组的新增过程
✔ 一般我们使用的都是无参构造函数去创建数组
✔ 每次新增的时候会先判断当前size+1和当前elementData长度哪个大,默认 size + 1 (0 + 1) > elementData.length(0)
✔ 所以第一次添加数据,数组便会扩容一次,长度为 DEFAULT CAPACITY = 10
✔ 当添加数据大于10的时候,便会再次触发扩容,扩容公式为 elementData.length + length >> 1 (扩容0.5倍,加上原来大小是1.5倍)
✔ 扩容时,需要对数组进行拷贝 elementData = Arrays.copyOf(elementData, newCapacity);