Objectクラスについてメモ。
というか、等価(equals)とハッシュ(hashCode)についてのメモかな。
というか、HashMapについての文量が一番多いかもしれない(爆)
equals()を実装したら、hashCode()も実装しなきゃいけないなんて知らなかったな~。
その理由はハッシュテーブルで使うから、ということらしい。
ついでなので、以前から疑問だったHashMapの実装について調べてみた。
疑問というのは、ハッシュ値はその定義上、異なるオブジェクトであっても等しいハッシュ値が存在し得るということ。そういうハッシュ値をそのまま配列のインデックスとかに使えば、異なるオブジェクトが等しいとして扱われてしまう。
その辺り大丈夫だよな~?と思っていたが、確かに大丈夫だった。
ハッシュコードは、テーブルの最初のインデックス算出の他に、キー値が不一致であることの確認に使われている(定義からすれば当然だったね)。そして、最終的にはequalsでキー値が等しいことを確認している。
だからequals()とhashCode()をペアで定義しないといけないわけだ。
…ハッシュテーブルとかハッシュマップを使うならば(爆)