在Java中,要将一个 ArrayList
变得不可修改,你可以使用以下几种方法:
###1. 使用 Collections.unmodifiableList
Java 提供了 Collections.unmodifiableList
方法,可以生成一个不可修改的视图。这种方式返回的列表将不允许添加、删除或更新元素,但底层的原始列表仍然可以修改。
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
方法创建一个不可修改的列表。这种列表在创建后就不能进行任何修改操作。
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. 自定义集合类如果你需要对集合的行为进行更精细的控制,可以自定义一个不可修改的列表类。在这个类中,你可以只暴露只读的方法,而隐藏其他修改方法。
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(...)
方法。
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"); }
}