在Java 9中如何初始化不可变集合?

1. Java 9中的不可变集合

在Java 9中,添加了一个十分实用的新特性:不可变集合。这一特性让我们可以方便地创建、操作、共享和使用不可变集合。

2. 初始化不可变集合

不可变集合有很多优点,如线程安全、提高性能等,但是在Java 8及之前的版本中初始化不可变集合需要手动实现,而在Java 9中则非常简单。

2.1 使用of()方法创建不可变集合

Java 9中,提供了一个方便快捷的方法来初始化不可变集合,就是使用of()方法。这个方法可以接受任何数量的参数,最多为10个。例如:

List<String> immutableList = List.of("java", "9", "immutable");

Set<Integer> immutableSet = Set.of(1, 2, 3);

Map<String, Integer> immutableMap = Map.of("apple", 1, "banana", 2, "orange", 3);

这里我们使用List.of()Set.of()Map.of()方法分别创建了不可变列表、不可变集合和不可变映射。在这里,我们可以看到我们可以很容易地创建不可变集合,而无需声明类型等额外操作,非常方便。

2.2 在不可变集合中添加元素

上面的示例只展示了如何初始化不可变集合,但是在实际开发中,很少只用一次性初始化所有元素。我们可能需要在不可变集合中添加或删除元素。Java 9再次提供了另一个方法来实现这个目的。

copyOf(Collection coll)方法可以接受任意集合并创建一个不可变集合副本。我们可以使用这个方法来动态地添加或删除元素。例如:

List<String> mutableList = new ArrayList();

mutableList.add("java");

List<String> immutableList = List.copyOf(mutableList);

mutableList.add("9");

System.out.println("immutableList: " + immutableList);

上述代码中,我们首先创建了一个可变列表mutableList。然后,我们使用List.copyOf()方法创建了不可变列表的副本immutableList,并将其添加到不可变列表中。随后,我们向可变列表中添加了元素"9",最后我们输出了不可变列表的值。

输出结果为:immutableList: [java]

可以看到,当我们向可变列表中添加元素时,不可变列表并没有跟随变化,因为我们是创建了不可变列表的副本。

2.3 使用Builder创建不可变集合

Java 9中,还提供了另一种初始化不可变集合的方式,即使用Builder创建。使用Builder创建不可变集合时,我们可以动态添加或删除元素。

以创建不可变列表为例,创建过程如下:

List<String> list = new ArrayList<>();

list.add("java");

list.add("9");

list.add("immutable");

List<String> immutableList = List.<String>builder()

.addAll(list)

.add("in")

.add("java")

.build();

System.out.println("immutableList: " + immutableList);

我们创建了一个可变列表list,并向其中添加了元素"java"、"9"和"immutable"。然后,我们使用Builder创建了不可变列表immutableList,并在其中添加了元素"in"和"java"。

输出结果为:immutableList: [java, 9, immutable, in, java]

可以看到,最终的不可变列表包含了所有添加的元素。

3. Java 9中使用不可变集合的注意事项

在使用不可变集合时,需要注意以下几点:

3.1 不可变集合不能被修改

一旦不可变集合被创建,就不能被修改。如果你想向一个已创建的不可变集合添加元素,你需要创建一个新的不可变集合副本。这也是使用copyOf(Collection<sup>? extends E</sup>> coll)方法的主要原因。

3.2 不可变集合不一定是线程安全的

不可变集合确实更容易被多个线程安全地共享,但是并不能保证不可变集合一定是线程安全的。例如,如果我们使用不可变列表并同时向它添加元素,那么可能会抛出UnsupportedOperationException异常。

3.3 不可变集合与元素顺序有关

在不可变集合中,元素的顺序是不可改变的。这意味着,当我们传入集合中的元素时,它们的顺序可能会影响最终创建的不可变集合。

4. 总结

Java 9中的不可变集合为我们提供了方便快捷的初始化和操作方式。我们可以通过of()方法、copyOf()方法和Builder来创建和操作不可变集合。但是在使用不可变集合时需要注意元素顺序、线程安全和元素不可修改等问题。

后端开发标签