Map<Integer, Configuration> m
Configuration {
int configNumber;
Map<Integer, Pair<Set<Address>, Set<Integer>>> groupInfo;
}
我的映射 m 本质上将 configNumber 映射到 Configuration 类。 future 的 configNumber 需要来自先前 configNumber 值的信息。但是,当我在 map 中添加新的 configNumber 时,第二个 Set<Integer>>
接下来是 Set<Integer>>
新放置的 configNumber。例如:
初始:
- key :
0
,值:Configuration(configNum=0, groupInfo={1=([server3, server2, server1],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])})
当我添加新 key 时,请说 1:
key :
0
,值:Configuration(configNum=0, groupInfo={1=([server3, server2, server1],[6, 7, 8, 9, 10])})
key :
1
,值:Configuration(configNum=1, groupInfo={1=([server3, server2, server1],[6, 7, 8, 9, 10]), 2=([server6, server5, server4],[1, 2, 3, 4, 5])})
如您所见,键0
是的Set<Integer>
这对中的内容随最近放置的内容而变化。我以为这是一个引用的问题。但每次我创建 new HashMap<>()
并在访问它之前将所有值放在那里。任何提示将不胜感激。
最佳答案
最明显的原因是重复使用 Set<Integer>
或Pair<>
构建第二个条目时从第一个条目开始。但如果没有您的代码,我们无法判断。
这是我提倡在公共(public) API 中进行写时复制的原因之一;如果您不认识的人向您提供 Collection ,请在存储之前制作自己的副本。 (如果您开始收到 ConcurrentModificationException
,您就知道您需要开始这样做。)
关于java - HashMap 中的值被新值覆盖 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50641718/