我想知道如何计算给定字符串的哈希码。我明白,在Java中,你可以这样做:如何用手计算字符串的哈希码?
String me = "What you say what you say what?";
long whatever = me.hashCode();
这是一切都很好,很棒,但我想知道如何手工完成。我知道计算字符串的哈希码给出的公式是这样的:
S0 X 31^(n-1) + S1 X 31^(n-2) + .... + S(n-2) X 31 + S(n-1)
其中S表示字符串中的字符,n是字符串的长度。使用16位Unicode然后,从字符串的第一个字符我会被计算为:
87 X (31^34)
然而,创建一个疯狂大的数字。我无法想象像这样将所有角色加在一起。那么,为了计算最低阶的32位结果,我该怎么做?从上面长什么等于-957986661,我不是怎么计算的?
@BalusC,感谢您提高我的答案! :-) – dty 2010-09-25 20:33:42
我得到的基本思路(我可以计算小字符串),但是当字符串变大时,我不确定要做什么。 – thomascirca 2010-09-25 21:18:12
@ user458346,字符串的大小并不重要。这是使用循环的值,不管循环多长时间,它都会变得更复杂。 – 2010-09-25 22:00:20