JDK 文档为java.lang.String.hashCode() http://java.sun.com/javase/6/docs/api/java/lang/String.html#hashCode() famously https://stackoverflow.com/questions/299304 says:
String 对象的哈希码计算如下
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
using int
算术,其中s[i]
是个 *i
*字符串的第一个字符,n
是字符串的长度,并且^
表示求幂。
该表达式的标准实现是:
int hash = 0;
for (int i = 0; i < length; i++)
{
hash = 31*hash + value[i];
}
return hash;
看到这个让我觉得我在算法课程中睡着了。这个数学表达式如何转化为上面的代码?
展开循环。然后你得到:
int hash = 0;
hash = 31*hash + value[0];
hash = 31*hash + value[1];
hash = 31*hash + value[2];
hash = 31*hash + value[3];
...
return hash;
现在您可以进行一些数学运算,插入 0 作为初始哈希值:
hash = 31*(31*(31*(31*0 + value[0]) + value[1]) + value[2]) + value[3])...
进一步简化一下:
hash = 31^3*value[0] + 31^2*value[1] + 31^1*value[2] + 31^0*value[3]...
这本质上就是给出的原始算法。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)