我遇到了一个有趣的问题,我相信它是由于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());
}
现在我向这个地图中插入一个键(通道)和值。稍后,我尝试使用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中获取键并不起作用,但是通过循环,我得到了完全相同的键,这意味着它存在,只是无法使用
get()
找到。我的问题是什么会导致这种情况?get()
如何找不到存在的键?我想提供一些示例代码,但似乎无法单独重现此问题。
有什么建议可能会导致这种情况?