我们如何在Java 9中创建不可修改的Map?

一个不可修改的映射是指其键 值 不能添加删除更新 一次映射的不可修改的实例已创建。静态工厂方法:Map中的Map.of()Map.ofEntries()提供了一种方便的方法来在Java 9中创建不可修改的映射。

通过使用Map.of()Map.ofEntries()方法创建的映射实例具有以下特征。

  • 工厂方法返回的映射通常是不可变的。这意味着不能添加删除更新键 值 。调用映射上的任何mutator方法都会导致UnsupportedOperationException

  • 如果所包含的键/值映射的是自己可变的,它可能会导致映射表现 在-consistentl Ÿ或其内容出现变化。

  • 不可变的映射不允许使用null 键 。如果尝试使用空键或空值创建,则会抛出NullPointerException

  • 重复 键 在创作本身的时间拒绝。将重复的键传递给静态工厂方法会导致IllegalArgumentException

  • 如果所有键和值都是可序列化的,则不可变 映射 是可序列 化的。

  • 映射的迭代顺序不确定, 并且可能会更改。

语法

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}