hashcode 相等两个类一定相等吗?equals 呢?相反呢?

发布于 2025-01-02 16:29:01 字数 1019 浏览 2 评论 0

hashCode 相等,equals 也不一定相等,两个类也不一定相等。

equals 相同,说明是同一个对象, 那么 hashCode 一定相同。

哈希表是结合了直接寻址和链式寻址两种方式,所需要的就是将需要加入哈希表的数据首先计算哈希值,其实就是预先分个组,然后再将数据挂到分组后的链表后面,随着添加的数据越来越多,分组链上会挂接更多的数据,同一个分组链上的数据必定具有相同的哈希值,java 中的 hash 函数返回的是 int 类型的,也就是说,最多允许存在 2^32 个分组,也是有限的,所以出现相同的哈希码就不稀奇了。

重名的人很多,名字相同, 但不是同一个人, hashCode 就是名字,人就是对象。


在 Java 中, hashCodeequals 的关系是这样的:

equals 相等的两个对象, hashCode 一定相等

  • 如果两个对象使用 equals 方法比较相等,那么它们的 hashCode 也必须相等。这是为了保证在基于哈希的集合(如 HashMapHashSet )中能够正常工作。

hashCode 相等的两个对象,不一定相等

  • 两个对象的 hashCode 相同并不意味着它们通过 equals 方法比较一定相等。这种情况称为哈希碰撞,即不同对象产生了相同的哈希值。

总结:

  • equals 相等 ⇒ hashCode 相等
  • hashCode 相等 ≠ equals 相等

理解这一点对于实现自定义对象的比较和存储在集合中非常重要。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

李白

暂无简介

文章
评论
25 人气
更多

推荐作者

kaipeng

文章 0 评论 0

吐个泡泡

文章 0 评论 0

沧桑㈠

文章 0 评论 0

御宅男

文章 0 评论 0

泪眸﹌

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文