如何在 java 中使集合只读?
javaobject oriented programmingprogramming更新于 2024/6/29 22:12:00
java.util 包中的 Collections 类专门用于集合的方法,这些方法提供了涉及多态算法的各种附加操作。
此类提供了 unmodifiable() 方法的不同变体,如下所示 −
Sr.No | 方法和说明 |
---|---|
1 | static <T> Collection<T> unmodifiableCollection(Collection<? extends T> c) 此方法接受任何集合对象并返回指定集合的不可修改视图。 |
2 | 静态 <T> List<T> unmodifiableList(List<? extends T> list) 此方法接受 List 接口的对象并返回它的不可修改视图。 |
3 | 静态 <K,V> Map<K,V> unmodifiableMap(Map<? extends K,? extends V> m) 此方法接受 Map 接口的对象并返回它的不可修改视图。 |
4 | 静态 <T> Set<T> unmodifiableSet(Set<? extends T> s) 此方法接受 Set 接口的对象并返回它的不可修改视图。 |
5 | 静态 <K,V> SortedMap<K,V> unmodifiableSortedMap(SortedMap<K,? extends V> m) 此方法接受 SortedMap 接口的对象并返回它的不可修改视图。 |
6 | static <T> SortedSet<T> unmodifiableSortedSet(SortedSet<T> s) 此方法接受 SortedSet 接口的对象并返回指定排序集的不可修改视图。 |
您可以使用与集合相关的方法之一使集合对象只读。
示例
以下 Java 程序创建一个 ArrayList 对象,向其中添加元素,将其转换为只读 List 对象。
import java.util.Collection; import java.util.Collections; import java.util.Vector; public class CollectionReadOnly { public static void main(String[] args) { //实例化ArrayList对象 Vector<String> vector = new Vector<String>(); vector.add("JavaFx"); vector.add("Java"); vector.add("WebGL"); vector.add("OpenCV"); System.out.println(vector); Collection<String> immutableVector = Collections.unmodifiableCollection(vector); System.out.println("Vector converted to read only "+immutableVector); immutableVector.add("CoffeeScript"); } }
Exception
[JavaFx, Java, WebGL, OpenCV] Array list converted to read only [JavaFx, Java, WebGL, OpenCV] Exception in thread "main" java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableCollection.add(Unknown Source) at September19.CollectionReadOnly.main(CollectionReadOnly.java:20)
一旦检索到 List 对象的只读视图,您就无法修改其内容,即您无法直接或使用 Iterator 对象添加或删除其中的元素,如果这样做,将引发 UnsupportedOperationException。