📚 ArrayList 底层实现原理详解
核心本质:基于动态数组实现,提供动态扩容能力,支持高效随机访问(O(1)
),但插入/删除可能需移动元素(O(n)
)。
🔧 底层结构
// JDK 11 源码关键字段
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable {
// 核心:存储元素的数组(使用 transient 避免序列化空位)
transient Object[] elementData;
private int size; // 实际元素数量
// 默认初始容量
private static final int DEFAULT_CAPACITY = 10;
}
⚙️ 四大核心机制
1. 初始化
// 无参构造(延迟初始化)
public ArrayList() {
this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA; // 空数组
}
// 首次添加元素时初始化
public boolean add(E e) {
if (size == elementData.length) // 首次添加时 length=0
elementData = grow(); // 扩容到默认容量10
// ... 添加元素
}