gpt4 book ai didi

java - HashSet.clear() 未按预期工作

转载 作者:行者123 更新时间:2023-12-02 02:53:49 25 4
gpt4 key购买 nike

我有一个 HashMap ,其中包含字符串的哈希集作为值。我编写了一个测试代码 - 如下所示:

 public static void main(String args[]) {

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

HashSet<String> set = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");
set.add("d");

hmap.put("a", set);

set.clear();// = new HashSet<String>();
set.add("a");
set.add("b");

hmap.put("c", set);

set.clear();// = new HashSet<String>();
set.add("a");
set.add("b");
set.add("c");

hmap.put("b", set);

for (Entry<String, HashSet<String>> entry : hmap.entrySet())
{
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}

我重复使用相同的哈希集来填充 HashMap 中的值。但我发现 hashset.clear() 没有按预期清除值。

我得到的上述代码的代码是-

b - [b, c, a]
c - [b, c, a]
a - [b, c, a]

因此,所有值都被最后一个 HashSet 覆盖。我阅读了clear() 的javadoc,预期的行为是在调用clear 时删除哈希集的元素。

当我使用 new HashSet 而不是 hashset.clear() 时的输出

b - [b, c, a]
c - [b, a]
a - [d, b, c, a]

这是我期望的输出。

我不想使用set = new HashSet<String>的原因每次都是因为我不想创建太多的哈希集( HashMap 的大小预计很大)。我错过了什么吗?

感谢您的帮助。

最佳答案

如果打印 HashMap 的地址或对其进行调试,您可以看到所有对象都引用相同的地址。

如果您使用的是eclipse或netbeans,您可以打断点并查看每一步的地址和状态。

祝你好运

关于java - HashSet.clear() 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43403311/

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