1
試圖在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數學運算,並且允許int overflow作爲計算的一部分。你的計算沒有,這是一個巨大的差異。 –