未应用 ArrayList 的默认大小

default size of ArrayList isn't being applied

我很难理解为什么 ArrayList 的大小在这里默认为零,而我在另一篇文章中看到的实际上是 10。即使我改尺寸了,不受影响

import java.util.ArrayList;
Class Test{
    private static final ArrayList<Long> foo = new ArrayList<>(1000);
   
    public static void main(String[] args) {
        System.out.println(foo.size());
}

谁能解释一下?

您必须区分您正在使用的数据结构接口,即 java.util.List 的接口及其内部实现,即 java.util.ArrayList 的接口,这意味着它由具有初始容量的数组,如果其容量不足以容纳所有元素,将重新创建。

构造函数 ArrayList<T>(int n) 不会创建大小为 njava.util.List,而是创建一个空的 java.util.List(大小为 0),其中它的实现 java.util.ArrayList 创建了一个大小为 n.

的内部后备数组

但是 List#size 是接口的一种方法,它报告列表的大小,而不是它不知道的内部后备数组的大小。

因此,如果您想访问元素 10,您会正确地得到一个异常,因为您还没有向列表中添加任何元素。

如果您想用 n 个零初始化它,请参阅 How can I initialize an ArrayList with all zeroes in Java?

数组

的大小

我们创建了一个大小为 1000 的整数数组,结果如下

Integer[] a = new Integer[1000]; 
System.out.println("Size of the Array: " + a.length);

结果:

Size of the Array: 1000

ArrayList

的容量

我们创建了一个大小为 1000 的 ArrayList,结果如下

List<Integer> a = new ArrayList<>(1000);
System.out.println("Size of the ArrayList : " + a.size());

结果:

Size of the ArrayList : 0

由于没有添加任何元素,因此大小为 0。

向 ArrayList 添加一个元素并检查大小

List<Integer> a = new ArrayList<>(1000);
a.add(1);
System.out.println("Size of the ArrayList : " + a.size());

结果:

Size of the ArrayList : 1

数组是固定大小ArrayList 是调整大小