ArrayList<Integer> list = new ArrayList<>();
1.用list.add()导致的自动扩容
for (int i = 0; i < = 10; i++) {
list.add(i);
}
没有初始化长度的list,会自动配置size=10
当我们调用 list.add() 存储次数超过10的时候
系统会自动给list扩容 系统会创建一个新的数组,新数组size=原本数组的size+原本数组size>>1(二进制右移一位),然后将旧数组的内容拷贝给新数组
所以会出现扩容规律[0, 10, 15, 22, 33, 49, 73, 109, 163, …]
2.用list.addAll()导致的自动扩容
list.addAll(List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11));
addAll的扩容规则是比较下次扩容的大小和变更后数组的大小,选择较大数作为新数组的size。
比如当前数组有5个数据,则当前数组的size为10,下次扩容变成15,当我们存入上面的11个数据的例子后,变更后的数组size为16(16>15)