ArrayList 源码 (基于Java8)
ArrayList 是 java 集合框架中比较常用的数据结构。继承自 AbstractList,实现了 List 接口。底层基于数组实现容量大小动态变化。允许 null 的存在。同时还实现了 RandomAccess、Cloneable、Serializable 接口,所以ArrayList 是支持快速访问、复制、序列化的。
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
1、默认初始化容量
private static final int DEFAULT_CAPACITY = 10;
2、
private static final Object[] EMPTY_ELEMENTDATA = {};
3、
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
4、存储ArrayList元素的数组缓冲区,当 elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA清空后,ArrayList再添加第一个元素时 扩展为DEFAULT_CAPACITY
transient Object[] elementData; // non-private to simplify nested class access
5、元素的实际个数
private int size;
6、构造具有指定容量的空列表,指定容量小于零抛出异常 IllegalArgumentException。
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elementData = EMPTY_ELEMENTDATA;
} else {
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
}
}
7、构造一个初始容量为10 的空列表
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
8、构造一个带有指定元素的
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// replace with empty array.
this.elementData = EMPTY_ELEMENTDATA;
}
}
9、