★★Java質問・相談スレッド141★★
レス数が950を超えています。1000を超えると書き込みができなくなります。
0968デフォルトの名無しさん
2010/11/17(水) 20:27:51Object#hsahCode()の中身は特に決まったアルゴリズムがありません。
equalsをオーバーライドする各クラスの特性に応じて適切にオーバーライド
することが推奨されています。
ただし、絶対守るべきルールとして「a.equals(b)」がtrueを返す場合に
「a.hashCode() == b.hashCode()」がfalseになってはなりません。
また次の用件を可能な限り満たすように実装することが期待されます。
・a.equals(b)がfalseとなるようなオブジェクトでは、できるだけ
a.hashCode() == b.hashCode()もfalseとなるように実装する。
・可能な限り高速に計算できるようにする。またはhashCode()が
戻り値で返す値は、計算結果をprivateメンバなどにキャッシュし、
高速に動作するように工夫する。
ちなみにObject#hashCode()は確か固定値で1を返します。
String#hashCode()は文字コードの掛け算と足し算で計算した無意
味値を返しますが、文字列が長い場合は計算時のCPU負荷があ
がってしまう可能性があるため、hashCode()が最初に呼び出され
た時にハッシュを計算し、その値をprivateなメンバ変数にキャッシ
ュしています。
レス数が950を超えています。1000を超えると書き込みができなくなります。