如何在 java 中使集合只读?

javaobject oriented programmingprogramming更新于 2024/6/29 22:12:00

java.util 包中的 Collections 类专门用于集合的方法,这些方法提供了涉及多态算法的各种附加操作。

此类提供了 unmodifiable() 方法的不同变体,如下所示 −

Sr.No方法和说明
1static <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 接口的对象并返回它的不可修改视图。
6static <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


相关文章