在一行中初始化一个ArrayList

64 浏览
0 Comments

在一行中初始化一个ArrayList

我想创建一个用于测试的选项列表。一开始,我是这样做的:

ArrayList places = new ArrayList();
places.add("Buenos Aires");
places.add("Córdoba");
places.add("La Plata");

然后,我重构了代码,如下所示:

ArrayList places = new ArrayList(
    Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

有更好的方法吗?

admin 更改状态以发布 2023年5月23日
0
0 Comments

实际上,初始化ArrayList的“最佳”方法可能就是你编写的方法,因为它不需要以任何方式创建新的List

ArrayList list = new ArrayList();
list.add("A");
list.add("B");
list.add("C");

问题在于,需要相当多的打字才能引用list实例。

还有其他选择,比如使用带有实例初始化器的匿名内部类(也称为“双大括号初始化”):

ArrayList list = new ArrayList() {{
    add("A");
    add("B");
    add("C");
}};

然而,我不太喜欢那种方法,因为最终得到的是ArrayList的一个子类,它具有一个实例初始化器,并且该类仅被创建用于创建一个对象-这似乎对我来说有点过度了。

如果Collection Literals proposal被接受的话就好了,它是Project Coin的一部分,计划在Java 7中引入,但在Java 8中似乎不太可能成为其中的一部分。

List list = ["A", "B", "C"];

不幸的是,这对你在这里没有帮助,因为它将初始化一个不可变的List而不是一个ArrayList,而且,如果有的话,它目前还不可用。

0
0 Comments

如果你将它声明为List,那么它会更简单-它必须是ArrayList吗?

List places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");

或者如果你只有一个元素:

List places = Collections.singletonList("Buenos Aires");

这意味着places不可变的(试图更改它会导致抛出UnsupportedOperationException异常)。

要创建一个可变的列表,它是一个具体的ArrayList,你可以从不可变列表创建一个ArrayList

ArrayList places = new ArrayList<>(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));

并导入正确的包:

import java.util.Arrays;

0