如何在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}
廣告
資料結構
網路
關係資料庫管理系統(RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP