gpt4 book ai didi

java - UnmodifiableMap(Java 集合)与 ImmutableMap(谷歌)

转载 作者:IT老高 更新时间:2023-10-28 11:36:35 29 4
gpt4 key购买 nike

上下文

我需要返回对我用于数据缓存的 map 的引用,并且我想确保没有人可以修改他们的引用。

问题

我在网上看到很多对 UnmodifiableMap 和 ImmutableMap 的引用,但我没有看到任何比较/对比它们的东西。我认为 Google/Guava 创建自己的版本是有充分理由的 - 有人可以告诉我它是什么吗?

最佳答案

不可修改的 map 仍可能发生变化。它只是可修改 map 上的一个 View ,通过不可修改 map 可以看到后备 map 的变化。不可修改的 map 只防止那些只引用不可修改的 View 的人修改:

Map<String, String> realMap = new HashMap<String, String>();
realMap.put("A", "B");

Map<String, String> unmodifiableMap = Collections.unmodifiableMap(realMap);

// This is not possible: It would throw an
// UnsupportedOperationException
//unmodifiableMap.put("C", "D");

// This is still possible:
realMap.put("E", "F");

// The change in the "realMap" is now also visible
// in the "unmodifiableMap". So the unmodifiableMap
// has changed after it has been created.
unmodifiableMap.get("E"); // Will return "F".

与此相反,Guava 的 ImmutableMap 是真正的不可变:它是给定 map 的真正副本,任何人都不能以任何方式修改这个 ImmutableMap。

更新:

正如 comment 中指出的那样,也可以使用标准 API 创建不可变 map

Map<String, String> immutableMap = 
Collections.unmodifiableMap(new LinkedHashMap<String, String>(realMap));

这将在给定 map 的真实副本上创建一个不可修改的 View ,从而很好地模拟 ImmutableMap 的特性,而无需将依赖项添加到 Guava。

关于java - UnmodifiableMap(Java 集合)与 ImmutableMap(谷歌),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22636575/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com