当前位置: 首页 > article >正文

【Java基础面试题029】Java中的hashCode和equals方法之间有什么关系?

回答重点

在Java中,hashCode()和equals方法的关系主要体现在集合类(如HashMap、HashSet)中。

他俩决定了对象的逻辑相等性哈希存储方式

equals()方法:

  • 用于判断两个对象是否相等,默认实现是使用==比较对象的内存地址,但可以在类中重写equals()来定义自己的相等逻辑

hashCode()方法:

  • 返回对象的哈希值,主要用于基于哈希的集合(如HashMap、HashSet)。同一个对象每次调用hashCode()必须返回相同的值,且内容相等的对象必须有相同的哈希值


两者的关系

在Java 中,hashCode 方法和equals方法之间有一个“合约”

  • 如果两个对象根据equals方法被认为是相等的,那么它们必须具有相同的哈希码。
  • 如果两个对象具有相同的哈希码,它们并不一定相等,但会被放在同一个哈希桶中。(哈希桶就是HashMap底层的数组)

注意:如果违背上述关系会导致在基于哈希的集合中出现错误行为。例如,HashMap可能无法正确存储和查找元素

扩展知识

为什么要重写hashCode()和equals()

因为在使用HashMap、HashSet等集合时,这些集合内部依赖hashCode()和equals{)方法来确定元素的存储位置。如果没有正确地重写这两个方法,集合可能无法正确判断对象的相等性,导致重复存储、查找失败等问题。

【Java基础面试题028】Java中的hashCode和equals方法,与==操作符有什么区别?-CSDN博客

重写equals()的基本规则

自反性:对于任何非空引用值×,x.equals(x)必须返回true。
对称性:对于任何非空引用值×和y,如果x.equals(y)返回true,则y.equals(x)也必须返回true。
传递性:对于任何非空引用值×、y 和z,如果x.equals(y)返回true 且y.equals(z)返回true,则x.equals(z)也必须返回true。
一致性:对于任何非空引l用值×和y,只要对象在比较中没有被修改,多次调用x.equals(y)应返回相同的结果。
对于任何非空引|用值×,x.equals(null)必须返回false。

重写hashCode()的基本规则

  • 在相同的应用程序执行过程中,对于同一个对象多次调用hashCode()必须返回相同的值
  • 如果两个对象根据equals()方法相等,则hashCode()值必须相等
  • 但是如果两个equals()不相等,它们的hashCode()值不必相同,但不同的hashCode()值可以提高哈希表的性能


http://www.kler.cn/a/447606.html

相关文章:

  • 基础爬虫案例实战
  • Leaflet的zoom层级-天地图层级之间的关系
  • javaFX.(蜜雪冰城点餐小程序)MySQL数据库
  • springboot460实习生管理系统设计和实现(论文+源码)_kaic
  • 知网研学 | 知网文献(CAJ+PDF)批量下载
  • 回归预测 | MATLAB实现CNN-BiGRU-Attention卷积神经网络结合双向门控循环单元融合注意力机制多输入单输出回归预测
  • Python tkinter写的《电脑装配单》和 Html版 可打印 可导出 excel 文件
  • CV算法在工作中有哪些实际应用?
  • 数据挖掘之认识数据
  • C++9--前置++和后置++重载,const,日期类的实现(对前几篇知识点的应用)
  • docker hub上下载使用postgis官方插件
  • 【python 字典(dict)和集合(set)】创建、访问、基本操作及各自的特点】
  • keil已有项目改工程名
  • 1387. 将整数按权重排序 中等
  • 3大Excel免费功能
  • 吉快科技荣膺“金边奖·最佳大模型一体机”,引领AI边缘新时代
  • 江苏计算机专转本 技能Mysql知识点总结(二)
  • C05S07-Tomcat服务架设
  • 15款行业大数据报告下载网站
  • H5 ios软键盘弹起遮挡输入框
  • #渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
  • macOS 配置 vscode 命令行启动
  • pat乙级1072 开学寄语
  • WebRTC服务质量(07)- 重传机制(04) 接收NACK消息
  • 基于微信小程序的消防隐患在线举报系统
  • Tensor