📅  最后修改于: 2023-12-03 14:51:16.197000             🧑  作者: Mango
在Java 9中,新增了一些方便我们创建不可变集的工厂方法。在介绍这些方法之前,我们先来了解一下Java中什么是不可变集。
不可变集是指一旦创建后,其元素就不可更改的集合。在Java中,我们可以使用Collections.unmodifiableXXX()方法或者Guava库的ImmutableXXX类来创建不可变集。但是,这些方法要么写起来比较麻烦,要么需要引入外部库。
在Java 9中,我们可以直接使用工厂方法来创建不可变集。下面列举了几个常用的工厂方法:
of()方法可以用来创建一个包含指定元素的不可变列表、集合或映射。例如:
// 创建一个包含指定元素的不可变列表
List<String> list = List.of("one", "two", "three");
// 创建一个包含指定元素的不可变集合
Set<String> set = Set.of("one", "two", "three");
// 创建一个包含指定键值对的不可变映射
Map<String, Integer> map = Map.of("one", 1, "two", 2, "three", 3);
需要注意的是,of()方法最多只能接收10个参数。
copyOf()方法可以用来创建一个包含另一个集合所有元素的不可变版本。例如:
// 创建一个包含list所有元素的不可变列表
List<String> immutableList = List.copyOf(list);
// 创建一个包含set所有元素的不可变集合
Set<String> immutableSet = Set.copyOf(set);
// 创建一个包含map所有键值对的不可变映射
Map<String, Integer> immutableMap = Map.copyOf(map);
需要注意的是,copyOf()方法创建的不可变集合与原始集合共享底层数据结构,因此,原始集合的变化会影响到不可变集合。如果需要创建真正的副本,可以使用深拷贝或者Guava库的ImmutableXXX.copyOf()方法。
上述就是Java 9中创建不可变集的工厂方法的介绍。这些方法不仅写起来方便,而且性能也比使用Collections.unmodifiableXXX()方法或者Guava库的ImmutableXXX类要好。因此,推荐使用这些新的工厂方法来创建不可变集。