java - 我尝试计算某些字符串的 hashCode 但失败了,我做错了什么?

标签 java oop

我知道字符串 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^131^0 添加回完整的公式中,以清楚地显示其到底是如何计算的。请注意,101*(31^0) 只是 101*1,最终值可以写成 s[n-1]

关于java - 我尝试计算某些字符串的 hashCode 但失败了,我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57083376/

相关文章:

虚拟表上的 C++ 虚拟析构函数和类的类型信息

java - java中if循环内的返回类型

c++ - 瞬时变量的值未分配与传递给构造函数的值相同

java - 远程PC访问功能

java - 通讯链接失败 Caused by : java.net.SocketException : Connection reset.

java - 不从 ArrayList 中删除对象

java - 声明来自套接字的输入/输出流以防止程序继续

java - 简单算法的时间复杂度

javascript - 在javascript中遍历对象寻找嵌套属性并返回找到的对象

php - 如何避免使用 OOP PHP 打开多个数据库连接