我知道字符串.hashCode()方法采用的公式如下:S0x31(n-1)+s1x31(n-2)+…+s(n-1)在我的教科書中,我舉了“貓”這個(gè)詞的例子。'C' x31^2 + 'a' x 31 +t最終值的給定方式為67,510我對這個(gè)值的來源感到非常困惑,特別是,用于單個(gè)字符的值。我嘗試了37,66和85(分別使用大寫C,小寫a和t的Unicode字符)。這是無效的。有人可以為我照亮這個(gè)嗎?遺憾的是,這是我的教科書給出的唯一例子,沒有試圖澄清或解釋它。
2 回答

波斯汪
TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超4個(gè)贊
67 * 31^2 + 97 * 31^1 + 116 * 31^0 = 67 * 31^2 + 97 * 31 + 116 = 64387 + 3007 + 116 = 67510
從 http://www.asciitable.com/ 中獲取67,97和116

汪汪一只貓
TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
字符串哈希代碼執(zhí)行以下操作:
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
因此,基本上每次迭代都會將現(xiàn)有哈希值乘以31,然后將下一個(gè)值添加到哈希值中。
所以當(dāng)“C”= 67,“a”= 97,“t”= 116時(shí),你得到:
h = 0
h *= 31;
h += 67; // 'C'
h *= 31;
h += 97; // 'a'
h *= 31;
h += 116;
h ==> 67510
添加回答
舉報(bào)
0/150
提交
取消