arraylist中参数(int初始容量)的含义是什么

ArrayList参数(int initialCapacity)是什么意思,我认为它是元素的数量,但是当我这样做时它不起作用:

 public class MyClass { private ArrayList arr; public MyClass(int n_elements) { arr = new ArrayList(n_elements); } } 

它是初始容量,即ArrayList将作为项目的内部存储开始分配的项目数。

ArrayList可以包含“任意数量的项目”(只要你有内存),并且在进行大型初始插入时,你可以告诉ArrayList分配更大的存储空间,以便在尝试分配更多空间时不浪费CPU周期为下一个项目。

例:

 ArrayList list = new ArrayList(2); list.add(1); // size() == 1 list.add(2); // size() == 2, list is "filled" list.add(3); // size() == 3, list is expanded to make room for the third element 

实际上,它是在可以在后台resize之前添加到ArrayList元素数量,如果使用正确,可以节省一些周期。

容量是对象内部存储的大小。 内部存储始终大于或等于列表的size()(以便它可以包含所有元素)。

 public class Main { public static void main(String[] args) throws Exception { ArrayList arr = new ArrayList<>(); System.out.println("initial size = " + arr.size()); // 0 System.out.println("initial capacity = " + getCapacity(arr)); for (int i = 0; i < 11; i++) arr.add(i); System.out.println("size = " + arr.size()); // 11 System.out.println("capacity = " + getCapacity(arr)); } static int getCapacity(ArrayList l) throws Exception { Field dataField = ArrayList.class.getDeclaredField("elementData"); dataField.setAccessible(true); return ((Object[]) dataField.get(l)).length; } } 

运行这个给出:

 initial size = 0 initial capacity = 10 size = 11 capacity = 16 

在引擎盖下, ArrayList本质上是一个动态数组 。 每次使用new Arraylist<>()实例化时,发生的事情是创建一个数组来保存要存储的值,其默认容量( 不要与大小混淆 )为10。

每次添加一个会增加容量超出容量的值时,都会创建一个新数组,其容量比先前容量的150%多一倍,并且复制了前一个数组的内容。

如果你大致了解结果列表的大小,或者确定但希望通过arrays使用arraylists提供的灵活性,你可以设置容量来防止创建新数组的重复过程,复制旧数组的内容新的一个,并摆脱旧的 – 否则会增加与列表大小成比例的事件。