在Java 9中又新增了一些API來幫助便捷的創建不可變集合,以減少代碼複雜度。 本期配套視頻:Java 9 新特性:快速定義不可變集合 常規寫法 以往我們創建一些不可變集合的時候,通常是這樣寫的: // 不可變的Set Set<String> set = new HashSet<>(); set. ...
在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/java-features/
歡迎關註我的公眾號:程式猿DD。第一時間瞭解前沿行業消息、分享深度技術乾貨、獲取優質學習資源