浅谈ArrayList及扩容机制
ArrayList
ArrayList就是动态数组,其实就是Array的复杂版本,它提供了动态的添加元素和删除元素的方法,同时实现了Collection 和 List接口,能够灵活的设置数组的大小。
通过源码的分析,我们可以看到ArrayList有三种构造方法
- 空的构造函数
- 根据传入的数值大小,创建指定长度的数组
- 通过传入Collection元素列表进行生成
// 默认的容量大小
private static final int DEFAULT_CAPACITY = 10;
// 定义的空的数组
private static final Object[] EMPTY_ELEMENTDATA = {
};
// 不可以被序列化的数组,相当于存储元素的缓冲区
transient Object[] elementData;
// 这个list集合的长度
private int size;
/**
* 空的构造函数
*/
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}
/**
* 根据用户传入的容量大小构造一个list集合,长度可以大于等于0,但是如果为负数会抛出异常
*/
public ArrayList(int initialCapacity) {
// 如果初始容量大于0
if (initialCapacity > 0) {
// 创建一个大小为initialCapacity的数组
this.elementData = new Object[initialCapacity];
} else if (initialCapacity == 0) {
// 创建一个空数组
this.elementData = EMPTY_ELEMENTDATA;
} else