📅  最后修改于: 2023-12-03 14:56:24.169000             🧑  作者: Mango
hashCode() 是 Java Object 类中的一个方法,返回对象的哈希码值,它是 int 类型的。哈希码用于确定对象在哈希表中的存储位置。hashCode() 方法的默认实现基于对象的内在信息,不同对象在内存中的位置不同,返回的哈希码值也不尽相同。
但是,如果你想在自己的类中使用哈希表,那么必须重写 hashCode() 方法,以确保哈希表可以正确地工作。
哈希码的作用是为了确定对象在哈希表中的存储位置。哈希表是一个包含各种数据的表格。哈希表可以存储键值对的集合,例如在 Map 集合中需要对键进行哈希。哈希表根据哈希码和键的值将键值对存储在表格中的位置。因此,重写 hashCode() 方法可以使哈希表准确、快速地存储对象。
首先,我们需要了解 hashCode() 方法返回的哈希码应符合一定的规则。例如,当两个对象的哈希码相同时,它们并不一定相等,因为在哈希表中可能会存在冲突。即使哈希码不同,对象也可能相等。
一般来说,重写 hashCode() 方法需要满足以下条件:
让我们看一个使用示例映射 Java 中的 hashCode() 方法的例子:
public class Person {
private String name;
private int age;
private String address;
// 构造函数、getter 和 setter 等方法省略
public Person(String name, int age, String address) {
this.name = name;
this.age = age;
this.address = address;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((address == null) ? 0 : address.hashCode());
result = prime * result + age;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
/* 省略 equals() 方法 */
}
在这个示例中,我们创建了一个名为 Person 的类来演示 hashCode() 方法的重写。Person 类有三个成员变量,分别是 name、age 和 address。这些变量将用于在 hashCode() 方法中生成对象的哈希码。
在 hashCode() 方法中,我们使用了在 Java 编程中很常见的哈希码生成模式:
prime
常量,这通常是素数,可以是 31、17 等等。result
变量,初始值为 1。prime
乘以当前的 result
,并将结果加上当前变量的哈希码。result
。在我们的示例中,我们使用了 name
、age
和 address
三个成员变量来生成哈希码。我们分别使用这些成员变量的哈希码与 prime 相乘,然后最终相加得到哈希码。
这个重写的 hashCode() 方法是可行的,它遵守了我们前面提到的哈希码生成规则,因此我们可以安全地将它用于哈希表中。
重写 hashCode() 方法是确保在哈希表中正确工作的关键。通过使用示例和常见的哈希码生成模式,我们可以生成适当的哈希码。当两个对象相等时,它们的哈希码应该相等。如果哈希码不同,对象也可能相等。无论我们使用哪种哈希码生成模式,我们都必须确保它符合 hashCode() 方法的基本规则,以确保在哈希表中正确工作。