1

From link :

http://www.tutorialspoint.com/java/java_string_hashcode.htm

Relationship between hashCode and equals method in Java

Good hashCode() Implementation

But i cant understand about the hashcode .

Here's an example:

public class StringDemo {
    public static void main(String args[]){
        String strob1="first string";
        System.out.println(strob1.hashCode());
    }

    }

This simple program give me output:-5468287

Can anyone tell me : How it give me output:-5468287 ?

4

4 回答 4

4

String's hash code is computed as:

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

using int arithmetic, where s[i] is the i-th character of the string, n is the length of the string, and ^ indicates exponentiation. (The hash value of the empty string is zero.)

Hence, the overflow of this integer computation can easily occur, resulting in negative according to Java Language specification-15.8.2:

If an integer addition overflows, then the result is the low-order bits of the mathematical sum as represented in some sufficiently large two's-complement format. If overflow occurs, then the sign of the result is not the same as the sign of the mathematical sum of the two operand values.

于 2013-11-14T18:42:31.503 回答
1

为什么?该方法在 java.lang.Object 中定义。您定义的任何类都会继承它。

请参阅在此处输入链接描述

什么?我建议你更多地研究什么是散列。维基散列函数

于 2013-11-14T18:39:42.737 回答
1

哈希码用于允许将对象存储在Map对象中(或与使用哈希的其他数据结构一起)。哈希码的目标是为具有不同值的对象提供唯一值,但如果对象相同,则生成相同的哈希码。这本质上是要查找的对象的唯一索引。

HashMap实现接口的 AMap依赖于hashcode()在不同对象之间均匀分布以获得最佳性能的良好实现。有了这个,它可以为诸如get().

因此,如果您打算使用您为 a 制作的自定义对象,keyHashMap应该提供一个hashcode()大多数 IDE 将帮助您的实现。

编辑:在您的示例输出中-5468287是它的哈希码值。如果您查看"first strings"仅相差一个字符的哈希码,它应该是一个非常不同的数字,这是一件好事,因为它有助于在 Map 中均匀分布对象。

于 2013-11-14T18:35:49.583 回答
1

本质上,除非您正在编写数据结构(您很可能不必这样做),否则您不会自己调用它。

但是,您通常会实现一个。现在几乎所有的 IDE 都提供自动生成 equals 和 hashCode 的功能。我建议暂时使用它;每当你实现 equals 时,也会生成一个 hashCode 实现。

于 2013-11-14T18:39:13.940 回答