当前位置: 首页 > 后端技术 > Java

如何在Java中快速创建不可变集合

时间:2023-04-01 18:17:25 Java

在Java9中,添加了一些新的API以帮助方便地创建不可变集合以降低代码复杂度。本期配套视频:Java9新特性:快速定义不可变集合常规写法以往我们在创建一些不可变集合时,通常是这样写的://immutableSetSetset=newHashSet<>();set.add("a");set.add("b");set.add("c");set=Collections.unmodifiableSet(set);//不可变ListListlist=newArrayList<>();list.add(1);list.add(2);list.add(3);list=Collections.unmodifiableList(list);Java8是Java8写的,使用StreamAPI也可以简化一看就可以演化成这样:Setset=Collections.unmodifiableSet(Stream.of("a","b","c").collect(toSet()));Listlist=Collections.unmodifiableList(Stream.of(1,2,3).collect(toList()));用Java9编写,现在在Java9中,这个操作变得更简单,只需要这样:Setset=Set.of("a","b","c");Listlist=List.of(1,2,3);同时也支持更复杂的集合,比如Map类型这样写:Mapmap=Map.of("a","1","b","2","c","3");只需注意Map.of的参数即可键和值成对出现,所以参数个数必须是偶数: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为例,给大家罗列一下它们的异同点:Java9引入的List.of创建的是不可变集合,而Arrays.asList是可变集合。List.of和Arrays.asList都不允许添加和移除元素,但是Arrays.asList可以调用set改变值,而List.of不能,会报java.lang.UnsupportedOperationException。List.of不允许空值,但是Arrays.asList允许空值太值得了,今天的分享到此结束!如果你在学习过程中遇到困难?您可以加入我们超优质的技术交流群,参与交流讨论,更好的学习进步!本文收录在我正在连载的《Java新特性专栏》中。这个系列应该以电子书的形式写成。如果想沉浸式阅读学习,可以访问网页版:https://www.didispace.com/jav...欢迎关注我的公众号:程序员DD第一个了解前沿行业新闻,分享深度技术干货,获取优质学习资源