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

时间:2010-11-13 12:24:41

标签: java initialization arraylist

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

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

5 个答案:

答案 0 :(得分:37)

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

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

示例:

ArrayList list = new ArrayList<Integer>(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

答案 1 :(得分:9)

实际上,它是在ArrayList在后​​台调整大小之前添加到{{1}}的元素数量,如果使用正确,可以节省一些周期。

答案 2 :(得分:7)

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

public class Main {
    public static void main(String[] args) throws Exception {

        ArrayList<Integer> 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

答案 3 :(得分:4)

在幕后,ArrayList基本上是dynamic array。每次使用new Arraylist<>()进行实例化时,发生的是创建一个数组来保存您要存储的值,其默认容量not to be confused with size为10。

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

如果您对结果列表的大小有所了解,或者确定但希望通过阵列使用arraylists提供的灵活性,您可以设置容量来防止这种重复创建新数组的过程,复制内容新数组中的旧数组,并删除旧数组 - 否则会增加与列表大小成比例的事件。

答案 4 :(得分:-1)

Arraylist 大小和容量不同。

例如: 在下面的数组列表中,初始容量 = 3,列表大小 = 0,因为列表中还没有元素。

ArrayList list = new ArrayList(3);