今天学习一下 ArrayList 的扩容机制。
1. 先看下 ArrayList 的构造方法,有三种
(1)带初始容量参数的构造函数,用户可以自己定义容量
(2)默认构造函数,使用初始容量10构造一个空列表(无参数构造)
(3)构造包含指定collection元素的列表,这些元素利用该集合的迭代器按顺序返回
源码如下:
/**
* 默认初始化大小,10
*/
private static final int DEFAULT_CAPACITY = 10;
/**
* 用于空实例的共享空数组实例
*/
private static final Object[] EMPTY_ELEMENTDATA = {
};
/**
* 用于默认大小的空实例的共享空数组实例。我们将其与空的元素数据区分开来,以了解添加第一个元素时要添加多少
*/
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {
};
/**
* ArrayList 的大小
*/
private int size;
/**
* 带初始容量参数的构造函数。(用户自己指定容量)
*
* @param initialCapacity the initial capacity of the list
* @throws IllegalArgumentException if the specified initial capacity
* is negative
*/
public ArrayList(int initialCapacity) {
if (initialCapacity > 0) {
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
this.elemen