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

时间:2017-02-28 15:17:44

标签: java hashmap

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

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;
}

1 个答案:

答案 0 :(得分:2)

您尚未覆盖hashCode,您已创建了新的hashcode方法(请注意cC)。

将您的代码更改为

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

它应该按预期工作。

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