加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – HashMap表示即使它确实存在,Key也不存在

发布时间:2020-12-14 05:25:50 所属栏目:Java 来源:网络整理
导读:我遇到了一个有趣的问题,我很确定是HashMap的错.考虑以下调试代码(AMap是HashMap,key是传递给此方法的值) System.out.println("getBValues - Given: " + key);System.out.println("getBValues - Contains Key: " + AMap.containsKey(key));System.out.printl
我遇到了一个有趣的问题,我很确定是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中获取密钥不起作用,但循环通过I得到完全相同的密钥,这意味着它就在get()中找不到它.我的问题是什么会导致这个? get()如何找不到存在的密钥?

我会提供一些示例代码,但我似乎无法独立重现.

有关可能导致此问题的任何建议?

解决方法

从我所看到的情况来看,我们仍然没有排除它是否与不变性有关.
如果你这样做:
aMap.put(key,value);
key.setFieldIncludedInHashCodeAndEquals(25);

然后你会从上面得到结果.

要对此进行排除,请向我们展示更多代码,或者在上面示例的for循环中添加

System.out.println(aMap.get(entry.getKey()));

另外,使用调试器.这样,您可以看到您的对象是否在正确的存储桶中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读