前言
有时最好不允许修改 java.util.Map, 例如跨线程共享只读数据。为此,我们可以使用Unmodifiable Map或Immutable Map。
在这个快速教程中,我们将看到它们之间的区别。然后,我们将介绍可以创建不可变Map的各种方法。
下面话不多说了,来一起看看详细的介绍吧
不可修改与不可变
Unmodifiable Map其实是一个可以修改的map的包装器,不允许直接修改它。
Map<String, String> mutableMap = new HashMap<>();
mutableMap.put("USA", "North America");
Map<String, String> unmodifiableMap = Collections.unmodifiableMap(mutableMap);
assertThrows(UnsupportedOperationException.class,
() -> unmodifiableMap.put("Canada", "North America"));
但是包装器里面底层的可变Map仍然可以改变,修改也反映在不可修改的Map中:
mutableMap.remove("USA");
assertFalse(unmodifiableMap.containsKey("USA"));
mutableMap.put("Mexico", "North America");
assertTrue(unmodifiableMap.containsKey("Mexico"));
另一方面,不可变Map包含其自己的私