List.of()
是 Java 9 引入的一个静态方法,用于创建不可变的列表(ImmutableList
)。这意味着一旦使用 List.of()
创建了列表,你就不能向其中添加、删除或修改元素。这个方法提供了一种方便的方式来创建包含零个或多个元素的不可变列表。
List.of()
方法有几个重载版本,允许你传递零个到十个元素作为参数。如果你需要创建包含超过十个元素的列表,你可以使用 List.of()
方法来组合较小的列表,或者使用其他集合构造方法(如 Arrays.asList()
后跟 Collections.unmodifiableList()
,尽管这不是一个纯粹的不可变列表,因为它仍然可以通过原始数组进行修改)。
基本用法
// 创建一个空的不可变列表
List<String> emptyList = List.of();
// 创建一个包含单个元素的不可变列表
List<Integer> singleElementList = List.of(1);
// 创建一个包含多个元素的不可变列表
List<String> multipleElementsList = List.of("apple", "banana", "cherry");
注意事项
-
不可变性:一旦创建,列表的内容就不能更改。尝试添加、删除或修改元素将导致
UnsupportedOperationException
。 -
性能:由于不可变性,
List.of()
创建的列表在性能上可能不是最优的,特别是在进行大量修改操作时。然而,对于需要不可变集合的场景,这种方法提供了简洁性和安全性。 -
类型安全:由于
List.of()
是一个泛型方法,它可以确保列表的类型安全。 -
使用场景:
List.of()
非常适用于创建常量列表、配置列表或作为方法参数传递的不可变列表。 -
元素限制:直接通过
List.of()
方法最多可以传递十个元素。如果需要更多元素,请考虑使用其他集合构造方法或组合多个List.of()
调用。
示例:组合多个 List.of()
调用
// 创建两个较小的不可变列表
List<Integer> firstHalf = List.of(1, 2, 3, 4);
List<Integer> secondHalf = List.of(5, 6, 7, 8, 9, 10);
// 使用 Stream 将它们组合成一个较大的不可变列表
List<Integer> combinedList = Stream.concat(firstHalf.stream(), secondHalf.stream())
.collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList));
// 注意:上面的 combinedList 实际上不是纯粹的 List.of() 创建的不可变列表,
// 但它通过使用 Collections.unmodifiableList() 达到了类似的效果。
// 更简洁但非纯不可变的方法(如果不需要完全的不可变性)
List<Integer> simplerCombinedList = new ArrayList<>(firstHalf);
simplerCombinedList.addAll(secondHalf);
// 注意:simplerCombinedList 是可变的
上面的 simplerCombinedList
示例是可变的,而 combinedList
示例则通过 Collections.unmodifiableList()
尝试创建一个不可变列表,但它不是由 List.of()
直接创建的。对于完全由 List.of()
创建的不可变列表,你应该直接传递元素给 List.of()
,或者如果元素数量超过限制,则考虑使用其他设计。