gpt4 book ai didi

java - 当尝试获取其中存在的对象时,Hashmap 给出 Null

转载 作者:行者123 更新时间:2023-11-29 07:19:20 27 4
gpt4 key购买 nike

我遇到了这个奇怪的问题,我正在迭代响应列表。当我尝试从问题的每个响应中获取答案时,大多数人都正确地得到了答案,除了从 HashMap 中获取答案给出 null 的情况。我已经在 Eclipse 中运行了 Debug模式,并将我尝试从 hashmap getAnswerMap() 获取其值的问题与该 hashmap 中的值进行了比较,两者似乎完全相同,但我仍然得到 null。

for (SurveyResponse response : responses) {      MultipleChoiceAnswer answer = (MultipleChoiceAnswer) response.getAnswerMap().get(question);        ....        ....      }

然后,我认为这是一个哈希码问题,所以我添加了另一行难看的代码来检查哈希码,它们实际上具有相同的哈希码,并且附加的以下行有效并且确实正确设置了答案。

for (SurveyResponse response : responses) {      MultipleChoiceAnswer answer = (MultipleChoiceAnswer) response.getAnswerMap().get(question);      for (Entry entry: response.getAnswerMap().entrySet()) {        if (entry.getKey().hashCode() == question.hashCode()) answer = (MultipleChoiceAnswer) entry.getValue();        ....        ....      }

但是,这非常丑陋,我真的很想从 HashMap 中得到正确的答案。有什么建议吗?

更新:对两个对象同时调用 hashCode() 和 equals() 方法表明两者具有相同的哈希码,并且 equals() 返回 true。我怀疑,正如下面的答案之一所表明的那样,问题可能是在将问题插入 HashMap 时使用不同的哈希码插入的。因此,调用相关 get 方法会返回 null,因为我尝试获取的对象没有与旧对象相同的哈希码。非常有帮助的答案!

最佳答案

需要注意的一件事:确保您用作键的类是不可变的 - 否则,当您将键放入时,它会散列为一件事,但会是不同的东西当你把它拿出来的时候。

编辑:它不一定是不可变的,但它必须是真实的,它只能以不改变哈希码的方式进行更改。使整个对象不可变是最简单的方法,但这不是唯一的方法。

关于java - 当尝试获取其中存在的对象时,Hashmap 给出 Null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6603963/

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