如何在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}
廣告