比较各种初始化 List 方法的便捷性

310 阅读1分钟

1 常规方式

常规的 List 初始化方法是先创建一个 ArrayList 对象,然后再把需要初始化的数据一个个添加进列表中,就像这样:

 List<String> list = new ArrayList<>();
 list.add("a");
 list.add("b");
 list.add("c");

2 匿名内部类方式

匿名内部类方式是使用 {{}} 双括号语法, 外层的 {} 先定义了一个匿名内部类,然后在内层的 {} 进行数据初始化:

 List<String> list = new ArrayList<String>() {{
     add("a");
     add("b");
     add("c");
 }};

Map 也可以用这种方法进行初始化。

3 数组方式

数组方式是利用数组的 Arrays 工具类来初始化列表。

List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));

因为 Arrays.asList 返回的是不可变列表,即 Arrays 类内部、静态的 ArrayList 类,表示为 Arrays$ArrayList,所以如果需要修改这个 list,就必须再用 new ArrayList<>()包装一下:

在这里插入图片描述

4 Stream 流方式

使用Stream 流方式来初始化列表,JDK8 支持。

List<String> list =Stream.of("a", "b", "c").collect(Collectors.toList());

5 Guava 方式

List<String> list = Lists.newArrayList("a", "b", "c");

这种方式目前来看,最简洁。使用之前需要先引用 guava 依赖包:

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>30.1.1-jre</version>
</dependency>

6 总结

JDK8 以及之前的 JDK版本,笔者推荐使用 Guava 方式来初始化列表,因为这种方式写的代码看起来清爽多了。

Java 项目组也意识到了这个问题,因此在 JDK9 提供了一种更简单的初始化列表的方式,List.of("a", "b", "c")。但因为 JDK9+ 目前还不是主流,所以这里暂不做考虑。