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<>()
并将所有值放在这里之前,都要访问它。任何提示将不胜感激。 最佳答案
最明显的原因是在构造第二个条目时重新使用第一个条目的Set<Integer>
或Pair<>
。但是,如果没有您的代码,我们将无法分辨。
这是我主张在公共API中进行写时复制的原因之一;如果您不认识的人正在为您提供收藏,请在存储之前制作自己的副本。 (如果您开始获得ConcurrentModificationException
,则知道您需要开始这样做。)