我有一个奇怪的情况-有一个HashMap,其初始化如下:
HashMap> downloadMap = new HashMap>();
然后我有以下内容,这些内容将通过石英调度程序无限期地执行:
myHashSet = retrieve(animal);
downloadMap.put(myKey, myHashSet);
// do stuff
downloadMap.get(myKey).clear();
之后发生的是,一个值与不同的键相关联.因此,例如,我将遇到以下情况:
Kitens [cute kitten, sad kitten]
Puppies [cute kitten, sad kitten]
永远都不会发生.
特别是,在检索小猫的HashSet之后:
myHashSet = retrieve(animal);
myHashSet = [可爱的小猫,悲伤的小猫]
downloadMap =小猫[],幼犬[]
然后执行put(),我得到:
downloadMap = Kitens [cute kitten, sad kitten], Puppies [cute kitten, sad kitten]
有谁知道为什么会这样吗?
先感谢您!
解决方法:
看起来您使用相同的HashSet< String>在您的HashMap< String,HashSet< String>>的所有值中引用.知道这一点,问题在于如何在HashMap中插入HashSet< String> s.请注意,您必须使用新的HashSet< String>每个键值对的参考.
相应地更新您的问题,以获得更具体的答案.
不直接与实际问题相关联,最好是面向接口的程序而不是直接的类实现.这样,我的意思是您应该将downloadMap变量声明为
Map> downloadMap = new HashMap>();
与将放置在此地图中的集合相似.
更多信息:
标签:hashmap,java
来源: https://codeday.me/bug/20191030/1968135.html