在java中初始化字符串列表的最短方法是什么?

Vla*_*mir 53 java arrays string initialization list

我正在寻找最短路径(在代码中)来初始化字符串列表和字符串数组,即包含"s1","s2","s3"字符串元素的列表/数组.

Jon*_*eet 98

有各种选择.我个人喜欢使用番石榴:

List<String> strings = Lists.newArrayList("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)

(番石榴是一个值得拥有的图书馆,当然:)

只使用JDK,您可以使用:

List<String> strings = Arrays.asList("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)

请注意,这将返回一个ArrayList,但这正常java.util.ArrayList- 它是一个可变但固定大小的内部.

我个人更喜欢Guava版本,因为它清楚地表明发生了什么(将返回的列表实现).如果你静态导入方法,它仍然清楚发生了什么:

// import static com.google.common.collect.Lists.newArrayList;
List<String> strings = newArrayList("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)

...而如果你静态导入asList它看起来有点奇怪.

另一个Guava选项,如果您不想要任何可修改的列表:

ImmutableList<String> strings = ImmutableList.of("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)

通常我想要么有一个完全可变的列表(在这种情况下Lists.newArrayList是最好的),完全不可变列表(在这种情况下ImmutableList.of是最好的).我很少想要一个可变但固定大小的列表.


aio*_*obe 27

Java 9+

Java 9引入了一种方便的方法List.of,如下所示:

List<String> l = List.of("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)

Java 8及更早版本

以下是一些替代方案:

// Short, but the resulting list is fixed size.
List<String> list1 = Arrays.asList("s1", "s2", "s3");

// Similar to above, but the resulting list can grow.
List<String> list2 = new ArrayList<>(Arrays.asList("s1", "s2", "s3"));

// Using initialization block. Useful if you need to "compute" the strings.
List<String> list3 = new ArrayList<String>() {{
    add("s1");
    add("s2");
    add("s3");
}};
Run Code Online (Sandbox Code Playgroud)


当涉及到数组时,你可以在声明点初始化它,如下所示:

String[] arr = { "s1", "s2", "s3" };
Run Code Online (Sandbox Code Playgroud)

如果您需要重新初始化它或创建它而不将其存储在变量中,您可以这样做

new String[] { "s1", "s2", "s3" }
Run Code Online (Sandbox Code Playgroud)

如果字符串常量可能是,它看起来像

String[] arr = { "s1", "s2", "s3", "s4", "s5", "s6", "s7", "s8", "s9", "s10",
                 "s11", "s12", "s13" };
Run Code Online (Sandbox Code Playgroud)

在这些我通常喜欢写作

String[] arr = "s1,s2,s3,s4,s5,s6,s7,s8,s9,s10,s11,s12,s13".split(",");
Run Code Online (Sandbox Code Playgroud)

  • @Mathias Schwarz,不是一成不变的,固定大小的。 (2认同)
  • 您应该注意**初始化块**变量创建ArrayList类的匿名子类. (2认同)
  • 请注意 List.of() 也是不可变的! (2认同)

Buh*_*ndi 15

List<String> stringList = Arrays.asList("s1", "s2", "s3");
Run Code Online (Sandbox Code Playgroud)

所有这些对象都存在于JDK中.

PS:正如aioobe所说,这使得列表固定大小.