java - 是否可以为不可修改的 map 制作可修改的副本?

标签 java data-structures

描述:

我的问题集之一提供了测试用例,以检查键入的代码是否正常工作。我不会详细介绍,但基本上这些测试都以 map 作为输入。我的代码适用于所有测试用例,除了一个:当我查看测试时,我看到输入映射被更改为不可修改的映射(Collections.unmodifyingMap(numbers)),并且这个不可修改的映射被传递给我编写的方法。这是唯一执行此操作的测试,所以我想知道是否可以复制此不可修改的映射,以便可以在我的方法中对其进行修改?我要做的最重要的修改是更新键的值 (map.put(key, map.get(key)-1)。

扩展名:

另一个问题,是否有类似的方法可以对列表或集合等其他数据结构执行此操作?

最佳答案

最简单的方法是创建新 map :

final Map<?, ?> unmodifiable = Collections.unmodifiableMap(new HashMap<>());
final Map<?, ?> modifiable = new HashMap<>(unmodifiable);

两个 map 引用相同值。

扩展

对于列表和集合等集合,其工作原理类似。它们通常具有可以将另一个集合传递给的构造函数。

关于java - 是否可以为不可修改的 map 制作可修改的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59034590/

相关文章:

java - 错误 "maximum number of expressions in a list is 1000"的分区列表

java - 具有 3 个字段的 Spring 安全身份验证而不仅仅是用户名和密码

java - MainPanel 不监听嵌套 JPanel 内的 KeyBinding

java - 如何使用 arrayList 从字符串表示形式(例如 "x 3x^2 5x^3"..)构造多项式

algorithm - 给定 n-1*n 数组,找到缺失的数字

java - api 和 isEmpty 方法之间有什么关系

java - 在 TestNG 中与 @Factory 并行运行测试类

r - 如何在R中初始化固定长度的向量

java - 用高效的加入和满足操作来代表反链

java - 如何使 pop() 方法返回并删除堆栈中的第二个元素?