-2

我很确定这不是重复的,尽管标题可能似乎使用过。请看一下

在JAVA中计算hashcode的依据是什么???

根据目前的状态???我不这么认为。

这是代码:

    initTest inttt2 = new initTest();// this initTest has params: int x and String str
    inttt2.str = "i am object1";
    inttt2.x = 374892762;
    System.out.println(inttt2.hashCode()); // print say 12345
    inttt2.x = 938745;
    inttt2.str = "i am object22222222";
    System.out.println(inttt2.hashCode()); // still print 12345

所以这里有一个问题:如果哈希码不依赖于当前状态,它是否依赖于内存中的位置?

无论您更改对象多少,哈希码是否保持不变?

我不是数据结构方面的专家,但有一个问题非常困扰我。

这个哈希码(尤其是对象的本机)函数必须返回整数范围内的哈希值,所以除了通过属性计算之外,它还有什么选项。

4

1 回答 1

3

这就是文档对Object#hashCode()所说的。

在合理可行的情况下,由 Object 类定义的 hashCode 方法确实为不同的对象返回不同的整数。(这通常通过将对象的内部地址转换为整数来实现,但 JavaTM 编程语言不需要这种实现技术。

String#hashCode()更具确定性。

返回此字符串的哈希码。String 对象的哈希码计算为

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

使用 int 算术,其中 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。(空字符串的哈希值为零。)

于 2013-06-11T17:02:32.920 回答