在一行中初始化 ArrayList

问题描述

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

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

需要注意的是,要引用该list实例需要进行大量输入。

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

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

但是,我不太喜欢这种方法,因为您最终得到的是一个ArrayList具有实例初始化程序的子类,并且创建该类只是为了创建一个对象——这对我来说似乎有点矫枉过正。

如果项目 Coin的Collection Literals 提案被接受,那将是一件好事(它计划在 Java 7 中引入,但它也不太可能成为 Java 8 的一部分。):

List<String> list = ["A", "B", "C"];

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

如果您只是将其声明为List- 它必须是 ArrayList 吗?

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

或者,如果您只有一个元素:

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

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

要创建一个具体的可变列表,ArrayList您可以ArrayList从不可变列表创建一个:

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

解决方法

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

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

然后,我将代码重构如下:

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

有一个更好的方法吗?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...