面试题:a.hashCode() 有什么用?与 a.equals(b) 有什么关系 ?

1. a.hashCode() 的作用

hashCode() 是 Java 中 Object 类的一个方法,用于返回对象的哈希码(一个整数)。哈希码的主要用途是:

  • 哈希表:在 HashMapHashSet 等基于哈希的集合中,hashCode() 用于确定对象的存储位置,从而提高查找、插入和删除的效率。
  • 快速比较:在比较两个对象是否相等时,可以先比较它们的哈希码。如果哈希码不同,对象一定不相等;如果哈希码相同,再进一步使用 equals() 方法进行比较。

2. a.equals(b) 的作用

equals() 是 Object 类的一个方法,用于比较两个对象是否相等。默认情况下,equals() 比较的是两个对象的引用是否相同(即是否指向同一个内存地址)。通常我们会重写 equals() 方法,以便根据对象的实际内容来判断它们是否相等。

3. hashCode() 与 equals() 的关系

hashCode() 和 equals() 之间有紧密的联系,主要体现在以下几个方面:

  • 一致性:如果两个对象通过 equals() 方法比较是相等的,那么它们的 hashCode() 必须相同。反之,如果两个对象的 hashCode() 不同,那么它们通过 equals() 方法比较一定不相等。
  • 重写规则:当你重写 equals() 方法时,通常也需要重写 hashCode() 方法,以确保上述一致性规则得到满足。否则,在使用哈希表等数据结构时,可能会出现无法正确找到对象的情况。

4. 示例

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Person person = (Person) o;
        return age == person.age && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

在这个例子中,Person 类重写了 equals() 和 hashCode() 方法,确保两个 Person 对象在 name 和 age 相同的情况下,equals() 返回 true,并且 hashCode() 返回相同的值。

5. 总结

  • hashCode() 用于生成对象的哈希码,主要用于哈希表等数据结构中。
  • equals() 用于比较两个对象是否相等。
  • 重写 equals() 时,必须同时重写 hashCode(),以确保一致性。
THE END
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容