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+ 目前还不是主流,所以这里暂不做考虑。