ArrayList
属性
版本号:
private static final long serialVersionUID = 8683452581122892189L;
Object数组对象,用于存放ArrayList元素:
transient Object[] elementData;
数组实际元素个数
private int size;
构造方法
We are All know about that ArrayList has three kinds of construction method as you can see follows :
1. without parameter
2. with a parameter : int capacity
3. with the parameter of Collection e
无参构造:实例化数组时默认赋值大小为10
带指定初始化大小的有参构造:
如果大小赋值大于0,新建initialCapacity大小的Object数组;如果等于0,初始化为空数组,否则抛出非法参数异常
带集合参数的有参构造:
将集合中的元素copy一份给ArrayList
重要方法
添加元素
- 添加一个元素到数组末尾
其中,ensureCapacityInternal(size + 1) 方法:
可以看到:
如果ArrayList数组的初始化是通过无参构造的,minCapacity则为0;
如果ArrayList数组的初始化是带initialCapacity参数的,那么minCapcity为当前元素个数+1(size + 1)
如果数据e插入后的容量(minCapacity)不大于数组长度(elementData.length),则正常插入数据到下标为size的位置,并将数组实际元素个数+1,并返回true
否则,将需要对ArrayList进行扩容(grow(minCapacity))
首先将旧的数组容量扩容为 : 原来容量+(原来容量按位右移一个比特位后的大小)
如果新容量小于minCapacity,则直接将minCapacity赋值给newCapacity
如果新容量大于数组可存储的最大容量:
(1)minCapacity < 0,报OOM
(2)如果minCapcity 大于 Integer.MAX_VALUE - 8,返回Integer.MAX_VALUE;否则,返回Integer.MAX_VALUE - 8;
再进行元素的插入和size + 1
- 添加一个元素到指定下标位置