情况一:
调用空参构造器创建对象。
new ArrayList<>();
源码中可以看到,空参构造器创建对象,默认容量为 0
情况二:
调用add方法向数组添加元素
- 首次扩容:向空List首次添加元素时,容量自动拓展为10.
- 二次扩容:当添加数量超过10时,触发扩容规则
- 多次扩容:遵守扩容规则
扩容规则
新容量大小 = 原始容量大小向右移位1 + 原始容量大小
// 如原始容量是10 ,则下次扩容
int newSize = (10 >> 1) + 10
// 所以下次容量是15
// 下下次则是 22
int newSize = (15 >> 1) + 15
情况三:
调用addAll方法向数组添加元素
扩容规则
新容量大小 = Max(原始容量大小向右移位1 + 原始容量大小, 添加新集合容量 + 原始容量大小)
上述意思就是下次容量会在 下次扩容容量 和 (添加新集合容量 + 原始容量大小) 之间选取一个最大值