有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java arraylist中的参数(int初始容量)是什么意思

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

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

共 (5) 个答案

  1. # 1 楼答案

    实际上,它是指在ArrayList在后台调整大小之前可以添加多少元素,如果使用正确,可以节省一些周期

  2. # 2 楼答案

    它是初始容量,即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
    
  3. # 3 楼答案

    容量是对象内部存储的大小。内部存储总是大于或等于列表的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
    
  4. # 4 楼答案

    在引擎盖下,ArrayList本质上是一个dynamic array。每次使用new Arraylist<>()进行实例化时,都会创建一个数组来保存要存储的值,其默认容量not to be confused with size为10

    每次您添加一个值,该值会将大小增加到容量之外,此时将创建一个新数组,其容量比以前的容量大150%,并且以前的数组的内容将在其中复制

    如果您对结果列表的大小有一个大致的了解,或者是确定的,但希望通过使用ArrayList而不是数组提供灵活性,那么您可以设置容量,以防止创建新数组、将旧数组的内容复制到新数组中的重复过程,并且去掉旧的一个——否则,它的出现次数将与列表的大小成比例增加

  5. # 5 楼答案

    Arraylist的大小和容量不同

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

    ArrayList=新的ArrayList(3)