如何使集合在Java中只读?

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

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

序号方法与说明
1静态<T>集合<T> unmodifiableCollection(Collection <?扩展T> c)
此方法接受任何集合对象,并返回指定集合的不可修改视图。
2静态<T> List <T> unmodifiableList(List <?扩展T> list)
此方法接受List接口的对象,并返回其不可修改的视图。
3静态<K,V> Map <K,V> unmodifiableMap(Map <?扩展K ,?扩展V> m)
此方法接受Map接口的对象并返回其不可修改的视图。
4静态<T> Set <T> unmodifiableSet(Set <?扩展T> s)
此方法接受Set接口的对象并返回其不可修改的视图。
5静态<K,V> SortedMap <K,V> unmodifiableSortedMap(SortedMap <K,?extended V> m)
此方法接受SortedMap接口的对象,并返回该对象的不可修改视图。
6静态<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");

   }

}

例外

[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。

以上是 如何使集合在Java中只读? 的全部内容, 来源链接: utcz.com/z/338263.html

回到顶部