gpt4 book ai didi

java - HashMap 说 Key 不存在,即使它存在

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:54:05 26 4
gpt4 key购买 nike

我遇到了一个有趣的问题,我很确定这是 HashMap 的错。考虑以下调试代码(AMap 是一个 HashMap,key 是传递给此方法的值)

System.out.println("getBValues - Given: " + key);
System.out.println("getBValues - Contains Key: " + AMap.containsKey(key));
System.out.println("getBValues - Value: " + AMap.get(key));
for(Map.Entry<A,HashSet<B>> entry : AMap.entrySet()) {
System.out.println("getBValues(key) - Equal: " + (key.equals(entry.getKey())));
System.out.println("getBValues(key) - HashCode Equal: "+(key.hashCode() == entry.getKey().hashCode()));
System.out.println("getBValues(key) - Key: " + entry.getKey());
System.out.println("getBValues(key) - Value: " + entry.getValue());
}

现在,在此 map 中,我插入了一个键( channel )和一个值。后来我尝试用 get() 取回值并运行这个调试代码,在我的例子中它给出了这个输出:

getBValues - Given: Channel(...)
getBValues - Contains Key: false <--- Doesnt contain key?!
getBValues - Value: null <--- Null (bad)
getBValues(key) - Equal: true <--- Given key and AMap key is equal
getBValues(key) - HashCode Equal: true
getBValues(key) - Key: Channel(Same...)
getBValues(key) - Value: [] <--- Not null (This is the expected result)

如您所见,直接从 HashMap 中获取 key 是行不通的,但是循环遍历我得到了完全相同的 key ,这意味着它就在那里,只是无法通过 get() 找到它.我的问题是什么会导致这种情况? get() 怎么找不到存在的键?

我会提供一些示例代码,但我似乎无法独立复制它。

对于可能导致此问题的原因有什么建议吗?

最佳答案

我敢打赌,您没有在关键的 Channel 类中正确覆盖 equals 和 hashCode。这样就可以解释了。

Joshua Bloch 在他的“Effective Java”第 3 章中告诉您如何正确地做到这一点。

http://java.sun.com/developer/Books/effectivejava/Chapter3.pdf

关于java - HashMap 说 Key 不存在,即使它存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5999727/

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