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+ 目前還不是主流,所以這裏暫不做考慮。