2017-02-28 6 views
0

ハッシュマップから値を取得しようとしています。キーは、equalsとhashcodeを実装したTransitionKeyオブジェクトです。参照するキーとハッシュマップの現在のキーを比較するためにequals(...)を使用すると、trueを返しますが、getはnullを返し、containsKeyはfalseを返します。私はハッシュマップに追加してからキーを変更していません。誰も助けることができますか? TransitionKeyクラスでキーは一致しますが、get/containsKeyは見つからない

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 
    } 

/** 
* @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; 
} 

答えて

2

あなたは(cCに注意してください)あなたは新しいhashcodeメソッドを作成して、hashCodeをオーバーライドしていません。

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

にコードを変更し

そして期待どおりに動作するはずです。

@Overrideアノテーションをコメントアウトしていないと、便利なコンパイラエラーが発生することに注意してください。

+0

ありがとうございました。私は、私が大文字ではなかったので、私のオーバーライドはどちらかといえなかった... –

関連する問題