📜  用示例映射Java中的 hashCode() 方法(1)

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

用示例映射Java中的 hashCode() 方法

什么是 hashCode()?

hashCode() 是 Java Object 类中的一个方法,返回对象的哈希码值,它是 int 类型的。哈希码用于确定对象在哈希表中的存储位置。hashCode() 方法的默认实现基于对象的内在信息,不同对象在内存中的位置不同,返回的哈希码值也不尽相同。

但是,如果你想在自己的类中使用哈希表,那么必须重写 hashCode() 方法,以确保哈希表可以正确地工作。

哈希码的作用

哈希码的作用是为了确定对象在哈希表中的存储位置。哈希表是一个包含各种数据的表格。哈希表可以存储键值对的集合,例如在 Map 集合中需要对键进行哈希。哈希表根据哈希码和键的值将键值对存储在表格中的位置。因此,重写 hashCode() 方法可以使哈希表准确、快速地存储对象。

怎么用示例映射Java中的 hashCode() 方法?

首先,我们需要了解 hashCode() 方法返回的哈希码应符合一定的规则。例如,当两个对象的哈希码相同时,它们并不一定相等,因为在哈希表中可能会存在冲突。即使哈希码不同,对象也可能相等。

一般来说,重写 hashCode() 方法需要满足以下条件:

  1. 如果两个对象相等,它们的哈希码应该相等
  2. 如果两个对象不相等,则它们的哈希码不应该相等(但哈希码相等的两个对象不一定相等)

让我们看一个使用示例映射 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 编程中很常见的哈希码生成模式:

  1. 声明一个 prime 常量,这通常是素数,可以是 31、17 等等。
  2. 定义一个 result 变量,初始值为 1。
  3. 将常量 prime 乘以当前的 result,并将结果加上当前变量的哈希码。
  4. 重复步骤 3 直到所有的成员变量都被处理。
  5. 返回 result

在我们的示例中,我们使用了 nameageaddress 三个成员变量来生成哈希码。我们分别使用这些成员变量的哈希码与 prime 相乘,然后最终相加得到哈希码。

这个重写的 hashCode() 方法是可行的,它遵守了我们前面提到的哈希码生成规则,因此我们可以安全地将它用于哈希表中。

总结

重写 hashCode() 方法是确保在哈希表中正确工作的关键。通过使用示例和常见的哈希码生成模式,我们可以生成适当的哈希码。当两个对象相等时,它们的哈希码应该相等。如果哈希码不同,对象也可能相等。无论我们使用哪种哈希码生成模式,我们都必须确保它符合 hashCode() 方法的基本规则,以确保在哈希表中正确工作。