我尝试为某些String计算hashCode,但失败了,我在做什么错?

时间:2019-07-17 20:05:52

标签: java oop

我知道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不符合算法要求?

1 个答案:

答案 0 :(得分:1)

我认为您误解了公式。尝试这样做:

  

98 *(31 ^ 3)+ 108 *(31 ^ 2)+ 117 *(31 ^ 1)+ 101 *(31 ^ 0)

这将输出:

  

3027034

结尾处的额外加成不属于公式。

s[n-1]用于表明公式的模式在整个String内都是连续的。

我将31^131^0重新添加到完整公式中,以清楚地显示出它是如何精确计算的。请注意,101*(31^0)只是101*1,可以将s[n-1]写入最终值。