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

javaobject oriented programmingprogramming更新于 2025/7/13 6:04:17

不可修改的 Map 是指一旦创建了不可修改的 Map 实例,其键和值就无法添加、删除或更新。静态工厂方法:Map 中的 Map.of() 和 Map.ofEntries() 提供了一种在 Java 9 中创建不可修改映射的便捷方法。

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

  • 工厂方法返回的映射通常是 不可变的。这意味着 键和 值不能添加、删除或更新。调用映射上的任何变量方法都会导致 UnsupportedOperationException。
  • 如果映射所包含的 键/值 本身是 可变的,则可能会导致 Map 表现不一致y或其内容似乎发生了变化。
  • 不可变映射不允许 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}

相关文章


有用资源