Collections.unmodifiableList
是 Java 集合框架中的一个静态方法,用于创建一个不可变的列表视图。这个方法返回的列表是原列表的一个不可变视图,任何修改操作(如 add
、remove
或 set
等)都会抛出 UnsupportedOperationException
。
具体解释
-
Collections
类:Collections
是一个包含静态方法的类,这些方法用于操作或返回集合。它包括各种实用工具方法,比如排序、搜索和线程安全的集合包装器等。
-
unmodifiableList(List<? extends T> list)
方法:- 这个方法接受一个列表作为参数,并返回该列表的不可变视图。原列表仍然可以修改,但通过不可变视图进行的任何修改操作都会抛出
UnsupportedOperationException
。
- 这个方法接受一个列表作为参数,并返回该列表的不可变视图。原列表仍然可以修改,但通过不可变视图进行的任何修改操作都会抛出
方法的作用
Collections.unmodifiableList
方法用于创建一个不可变的列表视图,以确保列表的内容不会被修改。这对于需要提供只读访问的场景非常有用。
代码示例
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class UnmodifiableListExample {public static void main(String[] args) {// 创建一个可变的列表List<String> modifiableList = new ArrayList<>();modifiableList.add("One");modifiableList.add("Two");modifiableList.add("Three");// 创建该列表的不可变视图List<String> unmodifiableList = Collections.unmodifiableList(modifiableList);// 输出列表内容System.out.println("Original list: " + modifiableList);System.out.println("Unmodifiable list: " + unmodifiableList);// 尝试修改不可变列表会抛出 UnsupportedOperationExceptiontry {unmodifiableList.add("Four");} catch (UnsupportedOperationException e) {System.out.println("Cannot modify the unmodifiable list");}// 修改原列表会反映到不可变视图中modifiableList.add("Four");System.out.println("Modified original list: " + modifiableList);System.out.println("Unmodifiable list after original modification: " + unmodifiableList);}
}
说明
-
创建可变列表:
- 使用
ArrayList
创建一个可变列表modifiableList
,并添加一些元素。
- 使用
-
创建不可变视图:
Collections.unmodifiableList(modifiableList)
创建了modifiableList
的不可变视图unmodifiableList
。
-
访问元素和列表内容:
- 可以通过
unmodifiableList
访问列表中的元素,但不能进行修改操作。
- 可以通过
-
尝试修改不可变列表:
- 尝试对
unmodifiableList
进行修改(如add
操作)会抛出UnsupportedOperationException
。
- 尝试对
-
修改原列表:
- 修改原列表
modifiableList
后,这些修改会反映在unmodifiableList
中,因为unmodifiableList
只是modifiableList
的视图。
- 修改原列表
使用场景
-
只读访问:
- 当你需要提供只读访问的列表时,可以使用
Collections.unmodifiableList
创建不可变视图,防止调用者修改列表。
- 当你需要提供只读访问的列表时,可以使用
-
线程安全:
- 提供不可变视图可以提高线程安全性,确保在多线程环境下不会发生意外修改。
-
保护数据完整性:
- 确保列表在传递给其他代码时保持不变,保护数据的完整性。
总结
Collections.unmodifiableList
是一个方便的工具,可以创建列表的不可变视图,确保列表内容不会被修改。它适用于需要只读访问、提高线程安全性和保护数据完整性的场景。