ArrayList — 动态数组
// 简化示意
public class ArrayList<E> {
transient Object[] elementData; // 存放元素的数组
private int size; // 实际元素个数
// 扩容:新容量 = 旧容量 + 旧容量 >> 1(1.5倍,[[Java-移位运算符|移位运算符]]详解)
private void grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + (oldCapacity >> 1);
elementData = Arrays.copyOf(elementData, newCapacity);
}
}关键特性:
- 初始容量:默认 10(JDK 8+ 懒加载,首次 add 才创建数组)
- 扩容因子:1.5 倍,
old + (old >> 1),位运算高效 - 扩容代价:O(n) 数组拷贝,可通过预分配容量避免
- 数据结构:连续内存空间 → CPU 缓存友好(空间局部性)