gpt4 book ai didi

java - 键匹配,但 get/containsKey 找不到它

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

我正在尝试从 HashMap 中检索值。键是已实现 equals 和 hashcode 的 TransitionKey 对象。当我使用 equals(...) 比较要查找的键和 hashmap 中的当前键时,它返回 true,但 get 返回 null,containsKey 返回 false。自从将 key 添加到 HashMap 中以来,我没有以任何方式修改该 key 。有人可以帮忙吗?

TransitionKey current  = new TransitionKey(this.currentState, inputSymbol);
for(TransitionKey tk: transitions.keySet()) {
System.out.println(tk.equals(current)); // True (only one key in table)
System.out.println(transitions.containsKey(current)); // false
String value = transitions.get(tk).toString(); // null
}

在 TransitionKey 类中:

    /**
* @override
*/
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof TransitionKey)) return false;
TransitionKey transitionKey = (TransitionKey) o;
return (state.equals(transitionKey.state)) && (symbol==transitionKey.symbol);
}

/**
* @override
*/
public int hashcode() {
int result = (int)symbol;
result = result*31 + state.hashCode();
return result;
}

最佳答案

您尚未重写 hashCode,您已创建了一个新的 hashcode 方法(请注意 cC).

将代码更改为

@Override
public int hashCode() {
int result = (int)symbol;
result = result*31 + state.hashCode();
return result;
}

它应该按预期工作。

请注意,如果您没有注释掉 @Override 注释,您将收到一个有用的编译器错误。

关于java - 键匹配,但 get/containsKey 找不到它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42512470/

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