Map<Integer, Configuration> m
Configuration {
int configNumber;
Map<Integer, Pair<Set<Address>, Set<Integer>>> groupInfo;
}
我的地图m实际上将configNumber映射到Configuration类。将来的configNumber需要来自先前configNumber值的信息。但是,当我在地图中添加新的configNumber时,第二个Set<Integer>>
跟随新放置的configNumber的Set<Integer>>
。例如:
初始:
0
,价值:Configuration(configNum=0, groupInfo={1=([server3, server2, server1],[1, 2, 3, 4, 5, 6, 7, 8, 9, 10])})
当我添加新密钥时,请说1:
键:0
,值:Configuration(configNum=0, groupInfo={1=([server3, server2, server1],[6, 7, 8, 9, 10])})
键: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<>()
并在访问它之前将所有值放在那里。任何提示将不胜感激。
答案 0 :(得分:0)
最明显的原因是在构建第二个条目时会重复使用第一个条目中的Set<Integer>
或Pair<>
。但是没有你的代码,我们无法分辨。
这是我提倡在公共API中进行写时复制的一个原因;如果您不认识的人正在为您提供集合,请在存储之前制作您自己的副本。 (如果你开始得到ConcurrentModificationException
,你知道你需要开始这样做。)