有沒有將 Set 轉換成不可變的 Java 方法


如果需要建立在初始化後無法更改的物件,您可以定義一個不可變物件。建立不可變物件沒有具體規則,其思想是限制類在初始化後對欄位的訪問。

Set 是集合框架中不允許重複值的一個介面。

轉換為不可變的集合的方法

是的,Java 在集合類中提供了一個名為unmodifiableSet() 的方法。此方法接受集合物件作為引數並返回其不可變的形式。

示例

在以下 Java 程式中,我們建立了一個 HashSet 物件,並使用 unmodifiableSet() 將其轉換為不可變物件。

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ImmutableSet {
   public static void main(String args[]) {
      Set<Integer> hashSet = new HashSet<Integer>();
      //Populating the HashSet
      hashSet.add(1124);
      hashSet.add(3654);
      hashSet.add(7854);
      hashSet.add(9945);
      System.out.println(hashSet);
      //Converting set object to immutable
      Set immutable = Collections.unmodifiableSet(hashSet);
   }
}

輸出

[1124, 3654, 9945, 7854]

將集合物件轉換為不可變物件後,如果您嘗試新增元素,它將產生執行時異常 −

示例

import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public class ImmutableSet {
   public static void main(String args[]) {
      Set<Integer> hashSet = new HashSet<Integer>();
      //Populating the HashSet
      hashSet.add(1124);
      hashSet.add(3654);
      hashSet.add(7854);
      hashSet.add(9945);
      System.out.println(hashSet);
      //Converting set object to immutable
      Set immutable = Collections.unmodifiableSet(hashSet);
      //Adding elements to the immutable set
      immutable.add(4466);
   }
}

執行時異常

[1124, 3654, 9945, 7854]
Exception in thread "main" java.lang.UnsupportedOperationException
   at java.util.Collections$UnmodifiableCollection.add(Unknown Source)
   at MyPackage.ImmutableSet.main(ImmutableSet.java:19)

更新於: 03-Jul-2020

1K+ 瀏覽量

開啟你的 職業 之路

完成教程以獲得認證

開始
廣告