java的不可变空列表代码示例

有几种方法可以在 Java 中创建不可变的空列表。UnsupportedOperationException如果对其执行任何修改操作,该列表将抛出一个。

⮚ 使用Arrays.asList()

Arrays.asList()方法返回由指定数组支持的固定大小的列表。如果我们不指定数组,这将返回一个不可变的空列表。

1
List<String> immutableList = Arrays.asList();

UnsupportedOperationException如果对其执行了添加或删除操作以及是否执行了ArrayIndexOutOfBoundsException任何更新操作(例如,通过List.set(int, Object)方法) , 该列表将抛出一个。

⮚ 使用集合

我们可以使用Collections.EMPTY_LIST它返回一个可序列化且不可变的空列表。

1
List<String> immutableList = Collections.EMPTY_LIST;

上述方法可能会引发未经检查的分配警告。以下示例演示了获取空列表的类型安全方法:

1
List<String> immutableList = Collections.emptyList();

⮚ 在 Java 8 中

我们可以调整Collectors.toList()前面讨论的收集器以始终生成不可变的空列表,如下所示:

1
2
3
List<String> immutableList = Stream.of(new String[] {})
                    .collect(Collectors.collectingAndThen(Collectors.toList(),
                                    Collections::<String>unmodifiableList));

⮚ 使用Guava

Guava 提供了几种静态实用方法,可用于获取不可变的空列表。

1.ImmutableList.copyOf如果指定列表为空,则返回一个不可变的空列表。

 

1
2
List<String> mutableList = Lists.newArrayList();
ImmutableList<String> immutableList = ImmutableList.copyOf(mutableList);

如果指定的列表为空,该方法将抛出 a NullPointerException,并且基础可变列表中的任何更改在不可变列表中都将不可见。

2. Guava还提供了一个builder,可以类似的创建一个不可变的空列表实例。

1
2
ImmutableList<String> immutableList = new ImmutableList.Builder()
                                            .build();

3.ImmutableList.of()也可以用来返回一个不可变的空列表。

此列表的行为和性能与 类似Collections.emptyList(),并且主要是为了代码的一致性和可维护性而更可取。该列表在内部转换为任何类型,因为它永远不会包含任何元素。

1
List<String> immutableList = ImmutableList.of();
java的不可变空列表代码示例

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注