判断两个对象是否相等,为什么必须同时重写equals()和hashcode()方法

本文深入解析了hashCode与equals方法在Java中的作用及其实现原理,阐述了二者之间的关系及其在集合类如HashSet中的应用,强调了正确实现hashCode的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

hashcode顾名思义是一个散列值码。

散列值,并不能表现其唯一性,但是具有离散性,其意义在于类似进行hashMap等操作时,加快对象比较的速度,进而加快对象搜索的速度。

hashcode和equals的关系

两个对象equals的时候,hashcode必须相等,但hashcode相等时,对象不一定equals。


在java中,equals和hashcode是有设计要求的,equals相等,则hashcode一定相等,反之则不然。

为什么会有这样的要求呢?

1、在集合中,比如HashSet中,要求放入的对象不能重复,怎么判定呢?

首先会调用hashcode,如果hashcode相等,则继续调用equals,如果equals也相等,则认为重复。

如果只重写了equals方法而没有重写hashcode方法,则hashcode就是继承Object的,返回内存编码,这时候可能出现equals相等,但是hashcode不等的情况。你的对象

使用集合时就会得不到你想要的结果。


最后明白两点就行了:

1、hashCode()方法存在的主要目的就是提高效率。

2、在集合中判断两个对象相等的条件,其实无论是往集合中存储数据,还是从集合中取数据,包括控制唯一性等,都是用这个条件判断的,条件如下:

首先判断两个对象的hashcode是否相等,如果不相等,就认为这两个对象不相等,就完成了。如果相等,才会判断两个对象的equals()方法是否相等,如果不相等,就认为

两个对象不相等,如果相等,那就认为这两个对象相等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值