Java hashCode() 方法

Java String类Java  String类


hashCode() 方法用于返回字符串的哈希码

为什么要有 hashCode
以HashSet如何检查重复,为例说明为什么要有 hashCode
当把对象加入 HashSet 时,HashSet 会先计算对象的 hashcode 值来判断对象加入的位置,同时也会与其他已经加入的对象的 hashcode 值作比较,
如果没有相符的hashcode,HashSet会假设对象没有重复出现。
如果发现有相同 hashcode 值的对象,会调用 equals()方法来检查 hashcode 相等的对象是否真的相同。
如果两者相同,HashSet 就不会让其加入操作成功。
如果不同的话,就会重新散列到其他位置。
(我的Java启蒙书《Head first java》第二版)
这样就大大减少了 equals 的次数,相应就大大提高了执行速度


可以看出hashCode()的作用就是获取哈希码,也称为散列码;
它返回一个int整数
这个哈希码的作用是确定该对象在哈希表中的索引位置
hashCode() 在散列表中才有用,在其它情况下没用。
在散列表中hashCode() 的作用是获取对象的散列码,进而确定该对象在散列表中的位置


hashCode与equals相关规定
如果两个对象相等,则hashcode一定相同
两个对象相等,对两个对象分别调用equals方法都返回true
两个对象有相同的hashcode值,它们不一定相等
因此,equals 方法被覆盖过,则 hashCode 方法也必须被覆盖
hashCode() 的默认行为是对堆上的对象产生独特值
如果没有重写 hashCode(),则该 class 的两个对象无论如何都不会相等
(即使这两个对象指向相同的数据)
//www.cnblogs.com/skywang12345/p/3324958.html


字符串对象的哈希码根据以下公式计算:

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

使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。空字符串的哈希值为 0。

语法

public int hashCode()

参数

  • 无。

返回值

返回对象的哈希码值。

实例

public class Test {
    public static void main(String args[]) {
        String Str = new String("www.facesoho.com");
        System.out.println("The string hash is " + Str.hashCode() );
    }
}

以上程序执行结果为:

The string hash is 1038879178

Java String类Java  String类