これはAPI上でも書かれていることですが、敢えてメモしておきます。
Mapで使用するキーは、hashCode()とequals(Object)を使用して同一かどうかを判定します。なので、equals(Object)でtrueを返すオブジェクトは、hashCode()も同一である必要があります。ただし、逆はそうでなくてもよくて、hashCode()が同一でも、equals(Object)がtrueを返さなければならないわけではありません。
もし、この規約が守られない場合は、キーとして使用するのは不適格です。なぜなら、Map中のエントリーと比較するときは、hashCode()が同一であるかどうかを調べてから、equals(Object)で調べるからです。hashCode()がオーバーライドされない場合、equals(Object)がtrueであっても、異なるオブジェクトとして認識されてしまい、Mapとしての機能を果たしません。
コメントする