java面试---hashcode与equals

本文介绍了equals方法用于比较对象相等性,hashcode方法提供对象哈希码便于快速查找。两者关系:equals确保相等性,hashcode决定查找效率,需保持一致性。重点讲解了Set与HashSet如何利用这些原理实现无序且不重复的特性。
摘要由CSDN通过智能技术生成

equals()方法比较简单,是用来比较两个对象之间是否相等。若不重新定义,其对比方式使用的是object类中的比较方法,利用两个对象是否"==",来判断。对于特殊对象,用户也可以重写此方法,定义自己的比较规则。

hashcode被叫做哈希码,也叫做散列码。hashcode()方法是定义在objcet类中的一个本地方法,作用是获取对象的哈希码。由于所有的对象都创建在内存的堆中,而堆的底层其实是维护了一张哈希表,每一个对象都有一个哈希码作为索引,使用该索引,就能够很快的找到该对象。

说人话就是,equals是创造某种方法,去比较两个对象是否相同,而hashcode是实现莫某种算法,为每个对象编号,方便查找。

两者的关系:
1.若两个对象相同,则equals比较的结果一定相同,二者也有着相同的hashcode
2.若两个对象的hashcode相同,也不能判断其equals比较的结果一定相同

hashcode好比一个带有编号的收纳盒(0 1 2 3 4 5 6),两个对象的hashcode相同(加入),说明使用某种算法后(hash码的计算方法),两个对象得到了相同的哈希码(例如都得到了0),则他们被放入了0号收纳盒。所以哈希码相同,并不能说明他们是同一个对象。

所以找到了收纳盒(hashcode)后,需要用equals方法继续判断,两个对象是否是同一个对象。
若重写了equals方法(即改变了对象的比较规则),也需要修改hashcode的计算规则(收纳盒的编号规则)。

Set和HashSet底层就是通过以上方式去查找元素的:由于set集合是无序且不重复的,所以插入元素时,会判断两个元素的hashcode是否相等,若不相等(来自不同的收纳盒),则判定为两个不同元素,可以插入,若hashcode相同,则继续通过equals方法判断,两个元素是否相同,若相同,则不插入新元素。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值