私はこの不思議な問題にぶち込んでいます。質問ごとに各回答から回答を得ようとすると、ハッシュマップから回答を得るとnullが返される場合を除き、ほとんどの回答が正しく取得されます。私はeclipseでデバッグモードを実行し、その値を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(); .... .... }
しかし、これは非常に醜いです。私は本当にハッシュマップから正しく答えたいと思います。助言がありますか?
更新: hashCode()メソッドとequals()メソッドの両方を両方のオブジェクトで呼び出すと、両方とも同等のハッシュコードがあり、equals()がtrueを返すことが示されます。私は、解答の1つが示すように、質問がハッシュマップに挿入されたときに別のハッシュコードで挿入されている可能性があると考えています。したがって、取得しようとしているオブジェクトに古いものと同じハッシュコードがないため、問題のgetメソッドを呼び出すとnullが返されます。非常に有用な答えのみんな!
あなたがしたいですかあなたのhashCode()とequals()を共有するには? –