创建一个集合时,集合的初始容量为0;
在第一次添加元素的时候,会对集合进行扩容,扩容后的容量为10;
之后,当向集合中添加元素达到集合的上限时,扩容为当前容量的1.5倍。
案例代码: (可复制直接执行看结果)
/**
* 创建一个集合时,集合的初始容量为0,在第一次添加元素的时候,会对集合进行扩容,扩容之后,集合容量为10;
* 之后,当向集合中添加元素达到集合的上限(也就是minCapacity大于elementData.length)时,会对集合再次扩容,扩容为原来的1.5倍。
* */
public static void main(String[] args) throws ReflectiveOperationException {
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1; i <= 100; i++) {
addElementAndPrintSize(list,i);
}
}
private static void addElementAndPrintSize(ArrayList<Integer> list, Integer value) throws ReflectiveOperationException {
Field field = list.getClass().getDeclaredField("elementData");
field.setAccessible(true);
int size = ((Object[]) field.get(list)).length;
System.out.print(size);
System.out.print(",");
list.add(value);
}
执行结果:
0,10,10,10,10,10,10,10,10,10,10,15,15,15,15,15,22,22,22,22,22,22,22,33,33,33,33,33,33,33,33,33,33,33,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,73,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,109,
参考: 关于 ArrayList 初始容量和扩容源码解读_Bran的博客-CSDN博客_arraylist初始容量和扩容