hashcode()和equals()方法

本文探讨了Object类中的equals()和hashCode()方法。equals()在未被覆写时比较对象引用,被覆写后可用于特定类型比较,如String中的字符串内容比较。而hashCode()用于计算对象哈希值,在散列表中加速查找。当覆写equals()时,通常也需要覆写hashCode()以保持一致性,确保相等的对象具有相同的哈希值,提高散列表性能。
摘要由CSDN通过智能技术生成

hashcode()和equals()都是object类中的方法。

equals()方法

equals()的作用分两种情况:
1. 没有被覆写时,等同于==,比较的是两个对象的地址是否相同。
2. 可以被覆写,如String中覆写了equals()方法,用于比较两个字符串的大小。

hashcode()方法

hashcode()的作用------计算哈希值,仅在本质为散列表的类中起作用。如:HashMap,HashTable,HashSet。
因为散列表中的元素不可重复,当添加新元素时需要判断它是否出现过。
如果没有hashcode(),需要从头到尾一个个比较是否相同,这样当散列表比较长时,元素比较的代价很大。
所以,可以利用hashcode(),因为散列表存储的是键值对,利用hashcode()计算对象的哈希值,即在散列表中的键值,可以一下找到元素要存储的物理位置:

  1. 如果这个位置没有元素,就可以直接添加;
  2. 如果有元素,再利用equals()比较元素是否相等,这样可以大大减少比较次数。

3. 为什么覆写equals()方法的时候需要覆写hashcode()方法?

因为覆写equals()方法后,我们还需要保证hashcode()方法的一些常规约定,才可以保证可以正常使用基于散列表的集合。

  1. equals()比较两个对象相等时,它的哈希值也要相等;
  2. equals()比较两个元素不等时,哈希值可能相等也可能不等
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值