Javaで自分のハッシュ関数を書き込もうとしています。私はこれがjavaが実装しているものと同じだが自分自身でそれをテストしたいと思っています。なぜ私は別の値を入力し、理由がわからないときに私は衝突を取得しています。javaハッシュ関数の衝突
public static int hashCodeForString(String s) {
int m = 1;
int myhash = 0;
for (int i = 0; i < s.length(); i++, m++){
myhash += s.charAt(i) * Math.pow(31,(s.length() - m));
}
return myhash;
}
'Math.pow(...)'はdoubleを返します。これはコンパイルされますか? –
コンパイルする、はい –
Java StringのhashCode実装では、 'Math.pow'を使用せず、int mathを使用し、intオーバーフローを計算の一部として使用できます。あなたの計算はそうではなく、それは大きな違いです。 –