在Java 9中又新增了一些API來幫助便捷的建立不可變集合,以減少程式碼複雜度。
本期配套視訊:Java 9 新特性:快速定義不可變集合
常規寫法
以往我們建立一些不可變集合的時候,通常是這樣寫的:
// 不可變的Set
Set<String> set = new HashSet<>();
set.add("a");
set.add("b");
set.add("c");
set = Collections.unmodifiableSet(set);
// 不可變的List
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list = Collections.unmodifiableList(list);
Java8的寫法
在Java 8的時候,利用Stream API還能簡化一下,可以演變成這樣:
Set<String> set = Collections.unmodifiableSet(Stream.of("a", "b", "c").collect(toSet()));
List<Integer> list = Collections.unmodifiableList(Stream.of(1, 2, 3).collect(toList()));
Java9的寫法
而現在到了Java 9,這一操作變的更為簡單,只需要這樣:
Set<String> set = Set.of("a", "b", "c");
List<Integer> list = List.of(1, 2, 3);
同時,對於一下更復雜的集合也一樣支援,比如Map型別也可以這樣寫:
Map<String, String> map = Map.of("a", "1", "b", "2", "c", "3");
就是要注意下,Map.of的引數是key和value成對出現的,所以引數數量一定是偶數:
Map.of()
Map.of(k1, v1)
Map.of(k1, v1, k2, v2)
Map.of(k1, v1, k2, v2, k3, v3)
...
與asList的區別
看到這裡,可能有的人會問了,之前不是對於集合有asXxx這樣的方便方法了麼?他們有啥區別嗎?
這裡就以List.of
和Arrays.asList
為例,給大家列一下它們的異同:
- Java 9中推出
List.of
建立的是不可變集合,而Arrays.asList
是可變集合 List.of
和Arrays.asList
都不允許add和remove元素,但Arrays.asList
可以呼叫set更改值,而List.of
不可以,會報java.lang.UnsupportedOperationException
異常List.of
中不允許有null值,Arrays.asList
中可以有null值
好了,今天的分享就到這裡!
如果您學習過程中如遇困難?可以加入我們超高質量的技術交流群,參與交流與討論,更好的學習與進步!
本文收錄在了我正在連載的《Java新特性專欄》,該系列該用電子書的方式編寫,如果想要沉浸式閱讀學習的話,可以訪問Web版本:https://www.didispace.com/jav...
歡迎關注我的公眾號:程式猿DD。第一時間瞭解前沿行業訊息、分享深度技術乾貨、獲取優質學習資源