如何在Java中建立不可變集合?


無論何時你需要建立一個初始化後無法更改的物件,你都可以定義一個不可變物件。建立不可變物件沒有具體的規則,其理念是在初始化後限制對類欄位的訪問。

集合在集合框架中是一個介面,它不允許重複值。

建立不可變集合時,你需要記住以下幾點:

  • 我們不應該能夠向其中新增或刪除元素。
  • 我們不應該能夠向不可變集合中新增空值。
  • 一旦你建立了一個不可變集合,你不能向其中新增或刪除物件,但是你可以修改其中儲存的物件。

使用Java 9的of()方法

Java 9 的of()方法接受元素列表,並建立一個包含給定元素的不可變集合並返回它。使用此方法,你可以在Java中建立不可變集合。

import java.util.Set;
public class ImmutableSet {
   public static void main(String args[]) {
      Set<Integer> set = Set.of(1458, 5548, 4587);
      System.out.println(set);
   }
}

使用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);
      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)

更新於:2019年8月6日

1K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告