ハッシュコード

859 ワード

基本データ型パッケージクラスのハッシュコード:byte,char,shortなどはint値longに変換すると64ビットであり,intは32ビットであり,直接変換するとデータが破棄される.JAvaではvalue^(value>>32)を用いてlong変換されたハッシュコードの例として、10101100が4ビット右にシフトした後、00001010が低4ビット値を除去することに成功し、2つの値の低4ビット異和(すなわち、元の高4ビットと元の低4ビット異和)を、低4ビットが0110に変化させ、すべてのビット数を利用した.したがって,結果は64ビットであったが,シフト後の両半はいずれも低32ビットにあり,このとき32ビットのintに変換し,高32ビットの値を直接捨てることができる.double 64ビットの場合、小数点があるためlongの方法で直接回転することはできません.
Double.doubleToLongBits(value)

さらにlongの操作を行います.floatの場合、intのbitに同理変換
最後にStringのハッシュコードについては多項式評価の方法である.
((u1*g+u2)*g+u3)*g+...for (int i = offset; i < end; ++i) {
                hash = 31*hash + chars[i];
            }
java g 31