hashCode()和equals()终于傻傻可以分清楚了
一.hashCode()和equals()作用
1.hashCode()和equals()都是Obiect类中的方法
先看看Object类中这两个方法的定义:
Object 的 hashCode 方法是本地方法,也就是用 c 或 c++ 实现的,该方法直接返回对象的内存地址
Object 的 equals 方法是用 == 去比较两个对象的地址值是否相等
但实际应用中,我们一般比较两个对象是否相等,是通过这两个对象的成员属性来判断的.故需要去重写这两个方法:
如果类中不重写此方法:
hashCode(): 返回的是对象的地址值
equals(): 比较两个对象的地址值是否相等
如果类中重写此方法:
hashCode(): 返回的是根据对象的成员变量,计算出的一个整数值
equals(): 比较两个对象的成员信息是否相同
2.类中重写hashCode()和equals()来比较两个对象是否相等
equals()比较是相等的,那么hashCode()肯定相等,也就是equals()是绝对可靠的;
hashCode()比较是相等的,那么equals()不一定相等,也就是hashCode()不是绝对可靠的;
3.既然equals()比较是绝对可靠的,为啥还要重写hashCode()呢
对于一个有大量成员信息的对象来说,通过equals()去比较的话效率是很低的
所以,一般是通过hashCode()和equals()搭配使用来提高效率:
先用hashCode()比较,如果不同则两个对象一定不相等;
如果相同则再通过equals()进行比较
==>HashSet集合能保证元素的唯一性,底层正是通过hashCode()和equals()来实现的
二.HashSet集合元素唯一性原理
其添加元素的add()方法再执行过程中,是进行了元素的判断的,这个判断流程是:
1.先比较元素的哈希值是否相同,这个哈希值就是通过元素的hashCode()计算出来的
2-1.如果哈希值不同,则直接添加到集合中;
2-2.如果哈希值相同,则继续通过equals()来比较
3-1.返回true,说明元素重复,不添加
3-2.返回false,说明元素不重复,添加
结论:
我们使用HashSet集合来存储对象,你想保证元素的唯一性,就必须重写它的hashCode()和equals()方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下