📜  Java中的类 hashCode() 方法及示例(1)

📅  最后修改于: 2023-12-03 14:42:58.756000             🧑  作者: Mango

Java中的类 hashCode() 方法及示例

在Java中,类Object中有一个hashCode()方法,该方法的作用是返回对象的哈希码值。哈希码值是用来实现快速查找和比较对象的一种技术。在将对象插入到散列表中时,可以用hashCode()方法返回的哈希码值来计算出该对象在散列表中的位置,从而快速地查找该对象。

hashCode()方法的原理

hashCode()方法的默认实现是返回对象的地址转换成整数的结果,因此,不同的对象的hashCode()值通常是不同的,除非它们覆盖了该方法。如果两个对象的hashCode()值相同,那么它们在散列表中的位置也会相同,但是它们不一定相等。

因为对象的地址在不同的运行环境中会发生变化,所以hashCode()方法不能用来比较不同运行环境中的对象。如果需要比较对象,可以使用equals()方法。

hashCode()方法的重写

如果需要重写hashCode()方法,需要遵守以下原则:

  1. 在一个应用程序执行期间,如果一个对象的equals()方法比较所用的信息没有被修改,那么对该对象调用hashCode()方法多次,它必须始终返回同样的整数。

  2. 如果两个对象根据equals()方法比较是相等的,那么对这两个对象中任意一个对象调用hashCode()方法都必须产生同样的整数结果。

  3. 如果两个对象根据equals()方法比较是不相等的,那么对这两个对象中任意一个对象调用hashCode()方法不要求产生不同的整数结果。但是,为不相等的对象生成不同的整数结果可以增加散列表的效率。

示例

下面是一个重写了hashCode()方法的示例:

public class Person {
    private String name;
    private int age;
    private String address;
 
    public Person(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }
 
    @Override
    public int hashCode() {
        int result = 17;
        result = 31 * result + name.hashCode();
        result = 31 * result + age;
        result = 31 * result + address.hashCode();
        return result;
    }
}

在这个示例中,hashCode()方法根据对象的name、age和address属性计算出一个整数结果。这个整数结果遵守了hashCode()方法的重写原则,并且可以用来在散列表中快速查找Person对象。

总结

hashCode()方法是一种快速查找和比较对象的技术,在Java中非常常用。如果需要重写hashCode()方法,需要遵守上述原则,并且根据对象的属性选择合适的算法来计算哈希码值。