在一行中初始化一个ArrayList
在一行中初始化一个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日
实际上,初始化ArrayList
的“最佳”方法可能就是你编写的方法,因为它不需要以任何方式创建新的List
:
ArrayListlist = new ArrayList (); list.add("A"); list.add("B"); list.add("C");
问题在于,需要相当多的打字才能引用list
实例。
还有其他选择,比如使用带有实例初始化器的匿名内部类(也称为“双大括号初始化”):
ArrayListlist = new ArrayList () {{ add("A"); add("B"); add("C"); }};
然而,我不太喜欢那种方法,因为最终得到的是ArrayList
的一个子类,它具有一个实例初始化器,并且该类仅被创建用于创建一个对象-这似乎对我来说有点过度了。
如果Collection Literals proposal被接受的话就好了,它是Project Coin的一部分,计划在Java 7中引入,但在Java 8中似乎不太可能成为其中的一部分。
Listlist = ["A", "B", "C"];
不幸的是,这对你在这里没有帮助,因为它将初始化一个不可变的List
而不是一个ArrayList
,而且,如果有的话,它目前还不可用。
如果你将它声明为List
,那么它会更简单-它必须是ArrayList吗?
Listplaces = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");
或者如果你只有一个元素:
Listplaces = Collections.singletonList("Buenos Aires");
这意味着places
是不可变的(试图更改它会导致抛出UnsupportedOperationException
异常)。
要创建一个可变的列表,它是一个具体的ArrayList
,你可以从不可变列表创建一个ArrayList
:
ArrayListplaces = new ArrayList<>(Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));
并导入正确的包:
import java.util.Arrays;