如何在Java 9中建立不可修改的Map?


**不可修改的Map**是指一旦建立了Map的不可修改例項,其**鍵**和**值**就不能被**新增**、**刪除**或**更新**。Map中的靜態工廠方法:**Map.of()** 和 **Map.ofEntries()** 提供了一種方便的方式來在**Java 9**中建立不可修改的Map。

使用**Map.of()** 和 **Map.ofEntries()** 方法建立的Map例項具有以下特徵。

  • 工廠方法返回的Map通常是**不可變的**。這意味著**鍵**和**值**不能被**新增**、**刪除**或**更新**。對Map呼叫任何修改方法都會導致**UnsupportedOperationException**異常。
  • 如果Map中包含的**鍵/值**本身是**可變的**,則可能導致Map的行為**不一致**或其內容看起來發生了變化。
  • 不可變的Map不允許**空鍵**和**空值**。如果嘗試使用空鍵或空值建立Map,則會丟擲**NullPointerException**異常。
  • 在建立時就會拒絕**重複的鍵**。將重複的鍵傳遞給靜態工廠方法會導致**IllegalArgumentException**異常。
  • 如果所有鍵和值都是可序列化的,則**不可變的Map**也是**可序列化的**。
  • 對映迭代的順序是**未指定的**,並且可能會發生變化。

語法

Map.of(k1, v1, k2, v2)
Map.ofEntries(entry(k1, v1), entry(k2, v2),...)

Map.of()示例

import java.util.Map;
public class UnmodifiableMapTest {
   public static void main(String[] args) {
      Map<String, String> empMap = Map.of("101", "Raja", "102", "Adithya", "103", "Jai", "104", "Chaitanya");
      System.out.println("empMap - " + empMap);
      empMap.put("105", "Vamsi");      // throws UnsupportedOperationException
   }
}

輸出

empMap - {104=Chaitanya, 103=Jai, 102=Adithya, 101=Raja}
Exception in thread "main" java.lang.UnsupportedOperationException
         at java.base/java.util.ImmutableCollections.uoe(Unknown Source)
         at java.base/java.util.ImmutableCollections$AbstractImmutableMap.put(Unknown Source)
         at UnmodifiableMapTest.main(UnmodifiableMapTest.java:7)


Map.ofEntries()示例

import java.util.Map;
import static java.util.Map.entry;
public class UnmodifidMapTest {
   public static void main(String[] args) {
      Map<String, String> empMap = Map.ofEntries(entry("101", "Raja"), entry("102", "Adithya"), entry("103", "Jai"), entry("104", "Chaitanya"));
      System.out.println("empMap - " + empMap);
   }
}

輸出

empMap - {102=Adithya, 101=Raja, 104=Chaitanya, 103=Jai}

更新於:2020年2月21日

307 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始學習
廣告