gpt4 book ai didi

java - HashMap put方法说明

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:16:58 26 4
gpt4 key购买 nike

我有一个奇怪的情况 - 有一个 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com