📅  最后修改于: 2023-12-03 15:16:32.211000             🧑  作者: Mango
在Java中,hashCode()方法是用于获取对象的哈希码(hash code)的方法,它返回一个整数,代表该对象在哈希表中的存储位置。hashCode()方法定义在Object类中,因此所有的Java对象都具有hashCode()的能力。在Java中,哈希表(hash table)是一种实现了映射(mapping)的数据结构,可以将键值(key-value)对映射到一个表中的位置,通过这个位置可以快速访问对应的值。
hashCode()方法在Java中非常重要,它最主要的作用是:
hashCode()方法的实现有一些规则,根据这些规则,我们可以很容易地为我们的类生成一个hashCode()方法:
下面是一个hashCode()方法的示例,我们可以看到,我们通常使用Object的hashCode()方法,但是如果我们自己定义了类,需要重写hashCode()方法:
public class Employee {
private String name;
private int age;
private String department;
// 构造函数
public Employee(String name, int age, String department) {
this.name = name;
this.age = age;
this.department = department;
}
// 重写hashCode()方法
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + age;
result = prime * result + ((department == null) ? 0 : department.hashCode());
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
// 重写equals()方法
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
Employee other = (Employee) obj;
if (age != other.age) {
return false;
}
if (department == null) {
if (other.department != null) {
return false;
}
} else if (!department.equals(other.department)) {
return false;
}
if (name == null) {
if (other.name != null) {
return false;
}
} else if (!name.equals(other.name)) {
return false;
}
return true;
}
}
在上面的代码中,我们定义了一个名为Employee的类,并定义了它的三个属性:name、age和department。在这个类中,我们重写了hashCode()方法和equals()方法。在hashCode()方法中,我们使用了Java中的一些运算符和操作,用于计算对象的哈希码。在equals()方法中,我们首先判断两个对象是否相等,如果相等则返回true,否则就用Java中的一些运算符和操作来判断两个对象是否相等。
使用Employee类的示例代码如下:
public class EmployeeTest {
public static void main(String[] args) {
Employee emp1 = new Employee("John", 30, "Engineering");
Employee emp2 = new Employee("Jane", 35, "Sales");
System.out.println("Employee 1 hashCode = " + emp1.hashCode());
System.out.println("Employee 2 hashCode = " + emp2.hashCode());
System.out.println("Employee 1 equals Employee 2? : " + emp1.equals(emp2));
}
}
在上面的代码中,我们创建了两个Employee对象emp1和emp2,并输出了它们的哈希码。通过这个示例代码,我们可以看到,在默认情况下,Java会为每个对象生成一个唯一的哈希码。即使我们创建的两个Employee对象具有不同的属性,它们的哈希码也是不相同的。但是,在我们重写了hashCode()方法之后,同样的属性的对象就会有相同的哈希码了。