在Java中,要将一个 ArrayList
变得不可修改,你可以使用以下几种方法:
###1. 使用 Collections.unmodifiableList
Java 提供了 Collections.unmodifiableList
方法,可以生成一个不可修改的视图。这种方式返回的列表将不允许添加、删除或更新元素,但底层的原始列表仍然可以修改。
java
import java.util.Collections;
import java.util.List;
public class UnmodifiableExample {
public static void main(String[] args) {
List<String> modifiableList = new ArrayList<>();
modifiableList.add("1");
modifiableList.add("2");
modifiableList.add("3");
// 创建不可修改的列表 List<String> unmodifiableList = Collections.unmodifiableList(modifiableList);
System.out.println(unmodifiableList); // 输出: [1,2,3]
// 异常:UnsupportedOperationException // unmodifiableList.add("4");
}
}
###2. 使用 List.of
方法(Java9及以上)
如果你使用的是Java9或更高版本,可以直接使用 List.of
方法创建一个不可修改的列表。这种列表在创建后就不能进行任何修改操作。
java
public class ImmutableListExample {
public static void main(String[] args) {
List<String> immutableList = List.of("1", "2", "3");
System.out.println(immutableList); // 输出: [1,2,3]
// 异常:UnsupportedOperationException // immutableList.add("4");
}
}
###3. 自定义集合类如果你需要对集合的行为进行更精细的控制,可以自定义一个不可修改的列表类。在这个类中,你可以只暴露只读的方法,而隐藏其他修改方法。
java
import java.util.List;
public class ImmutableArrayList<T> {
private final List<T> list;
public ImmutableArrayList(List<T> list) {
this.list = new ArrayList<>(list); //复制列表,防止外部修改 }
public T get(int index) {
return list.get(index);
}
public int size() {
return list.size();
}
// 不提供添加、删除元素的方法}
###4. 使用 java.util.Set
或 java.util.Map
在需要不变性(immutable)的情况下,使用其他不变的数据结构(如 Set
或 Map
)也可以。在 Java9 中提供了 Set.of(...)
和 Map.of(...)
方法。
java
public class ImmutableSetExample {
public static void main(String[] args) {
Set<String> immutableSet = Set.of("1", "2", "3");
System.out.println(immutableSet); // 输出: [1,2,3]
// 异常:UnsupportedOperationException // immutableSet.add("4");
}
}