我知道字符串 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 与算法应有的不一样?
最佳答案
我认为您误读了公式。尝试这样做:
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]
。
关于java - 我尝试计算某些字符串的 hashCode 但失败了,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57083376/