📅  最后修改于: 2023-12-03 14:42:58.756000             🧑  作者: Mango
在Java中,类Object中有一个hashCode()方法,该方法的作用是返回对象的哈希码值。哈希码值是用来实现快速查找和比较对象的一种技术。在将对象插入到散列表中时,可以用hashCode()方法返回的哈希码值来计算出该对象在散列表中的位置,从而快速地查找该对象。
hashCode()方法的默认实现是返回对象的地址转换成整数的结果,因此,不同的对象的hashCode()值通常是不同的,除非它们覆盖了该方法。如果两个对象的hashCode()值相同,那么它们在散列表中的位置也会相同,但是它们不一定相等。
因为对象的地址在不同的运行环境中会发生变化,所以hashCode()方法不能用来比较不同运行环境中的对象。如果需要比较对象,可以使用equals()方法。
如果需要重写hashCode()方法,需要遵守以下原则:
在一个应用程序执行期间,如果一个对象的equals()方法比较所用的信息没有被修改,那么对该对象调用hashCode()方法多次,它必须始终返回同样的整数。
如果两个对象根据equals()方法比较是相等的,那么对这两个对象中任意一个对象调用hashCode()方法都必须产生同样的整数结果。
如果两个对象根据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()方法,需要遵守上述原则,并且根据对象的属性选择合适的算法来计算哈希码值。