java - HashMap put方法说明

标签 java hashmap

我有一个奇怪的情况 - 有一个 HashMap,初始化如下:

    HashMap<String, HashSet<String>> downloadMap = new HashMap<String, HashSet<String>>();

然后我有以下内容,它们将通过 quartz 调度程序无限期执行:

    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>> .知道这一点,问题是你如何插入 HashSet<String>在你的HashMap .请注意,您必须使用新的 HashSet<String>每个键值对的引用。

相应地更新您的问题以获得更具体的答案。

与实际问题没有直接关联,最好是面向接口(interface)编程而不是直接类实现。有了这个,我的意思是你应该声明 downloadMap变量为

Map<String, Set<String>> downloadMap = new HashMap<String, Set<String>>();

类似于 Set s 将放在这张 map 中。

更多信息:

关于java - HashMap put方法说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18583422/

相关文章:

java - Thread.holdsLock(lock) 的目的是什么?

string - 如何检索作为 Clojure 中的列表的 HashMap 中的键的值?

java - 链接 HashMap 按值查找键?

Java - 没有新实例的对象

java - 如何为单元测试触发 Swing GUI 事件

java - Java 中的斐波那契递归 - 没有 For 循环?

java - Map.containsKey() 在没有空值的 Map 中有用吗?

java - 哈希桶的数量

java - 从类路径中的所有 jar 文件中提取扩展 "Randomizer"的类

java - Android:异步任务执行doInBackground()时发生错误