需要 java 中 String.hashCode() 方法的证明/分解



我知道 String.hashCode() 方法采用的公式如下:

S0x31(n-1)+s1x31(n-2)+…+s(n-1)

在我的教科书中,我得到了猫这个词的例子。

'C'  x31^2 + 'a' x 31 +t

最终值为67,510

我完全困惑这个值是从哪里派生的,特别是,各个字符使用了哪些值。我尝试了 37、66 和 85(分别使用大写字母 C 的 Unicode 字符、小写 a 和 t)。这是无效的。有人可以为我阐明这一点吗?

遗憾的是,这是我教科书中给出的唯一例子,没有试图澄清或解释它。

67 * 31^2 + 97 * 31^1 + 116 * 31^0 = 
67 * 31^2 + 97 * 31 + 116 = 
64387 + 3007 + 116 = 
67510

67、97 和 116 取自 http://www.asciitable.com/

字符串哈希代码可以:

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;
}

所以基本上每次迭代现有哈希乘以 31,然后将下一个值添加到哈希中。

因此,当"C"= 67,"a"= 97,"t"= 116时,得到:

h = 0
h *= 31;
h += 67; // 'C'   
h *= 31;
h += 97; // 'a'
h *= 31;
h += 116;
h ==> 67510

相关内容

  • 没有找到相关文章

最新更新