我知道String hashCode的算法是
s[0]*31^(n - 1) + s[1]*31^(n - 2) + ... + s[n - 1]
我试图在计算器上计算如果我有这样的字符串,那么hashCode会是什么
String s = new String("blue");
使用算法(用于从char到int的转换,我使用了ASCII转换器),我有: 98 * 31 ^(3)+ 108 * 31 ^ 2 + 117 * 31 + 101 + 98 + 108 + 117 +101 = 3027458
但是当我键入:
public static void main(String[] args) {
String s = new String("blue");
System.out.println(s.hashCode());
}
我得到输出: 3027034
我在做什么错?为什么hashCode不符合算法要求?
答案 0 :(得分:1)
我认为您误解了公式。尝试这样做:
98 *(31 ^ 3)+ 108 *(31 ^ 2)+ 117 *(31 ^ 1)+ 101 *(31 ^ 0)
这将输出:
3027034
结尾处的额外加成不属于公式。
s[n-1]
用于表明公式的模式在整个String
内都是连续的。
我将31^1
和31^0
重新添加到完整公式中,以清楚地显示出它是如何精确计算的。请注意,101*(31^0)
只是101*1
,可以将s[n-1]
写入最终值。