如何在 Java 中创建不可修改的列表?

2024 年 9 月 10 日 | 阅读 3 分钟

在 Java 中,当我们希望确保列表的内容在创建后无法被更改时,创建不可修改的列表可能非常重要。在本节中,我们将讨论如何在 Java 中创建不可修改的列表。

为什么需要不可修改的列表?

在探索技术之前,让我们先了解一下不可修改列表的重要性。如果您希望为代码强制执行不变性,那么不可修改的列表很重要。列表的不变性保证一旦形成,其元素就不能被更改。这在我们需要线程安全、数据完整性或在不冒意外更改风险的情况下分发列表时很有帮助。

Java 集合中的 unmodifiableList() 方法

在 Java 中获取现有列表的不可修改视图的一种简单方法是使用 Collections 类的 unmodifiableList() 函数。尝试直接或通过其迭代器修改列表的任何尝试都将引发 UnsupportedOperationException,因为此视图禁止修改列表。

语法

不可修改列表的重要性

1. 通过不变性保证数据完整性

对象的不可变性确保其状态(在此情况下为列表)在创建后无法被更改。它表明列表的组件一旦建立就不会改变,从而为数据提供了可靠且一致的表示。

2. 线程安全

并发编程的线程安全通过不可修改列表得到增强。在多线程环境中访问或遍历这些列表不需要显式的同步技术,因为它们无法更新。由于其固有的线程安全,并发编程变得更加容易,并且数据损坏的可能性降低。

3. 安全地传递列表

在方法之间或程序的不同部分之间传递列表时,不可修改列表提供了一定程度的安全性。

方法 1:使用 Collections.unmodifiableList() 方法

Java Collections 类具有 unmodifiableList() 实用函数,可用于创建列表的不可修改视图。使用此方法的方法如下:

UnmodifiableList.java

输出

Unmodifiable List: [Java, Python, C++]

方法 2:使用 List.copyOf() 方法

Unmodifiable.java

输出

Unmodifiable List: [Maths, Physics, English]

与 Collections.any 尝试使用 List.copyOf() 方法创建的 unmodifiableList() 尝试修改 unmodifiableList() 一样。调用 unmodifiableList().There 将会发生 UnsupportedOperationException。

方法 3:使用 Arrays.asList() 方法

可以使用 Arrays.asList() 函数将数组转换为不可修改的列表。即使列表本身无法更改,对原始数组的更改也会影响列表,反之亦然。

Unmodifiable.java

输出

Unmodifiable List: [One, Two, Three]

方法 4:在 Java 9 中使用 List.of() 方法

Java 9 中引入的 List.of() 工厂方法允许您立即创建不可修改的列表。

Unmodifiable.java

输出

Unmodifiable List: [Dell, Apple, Hp]