九、JavaSE-Set接口

文章讨论了在Java中重写equals方法时为何必须重写hashCode方法,主要为了保持equals相等的对象具有相同的hashCode,避免哈希碰撞,提高HashMap等数据结构的查找效率。同时,介绍了Comparable和Comparator接口在排序中的作用,Comparable用于对象自身的排序,而Comparator则用于外部定义排序规则,可以实现多种排序方式。
摘要由CSDN通过智能技术生成
  1. 为什么重写equals时必须重写hashCode方法?

是为了提高效率,采取重写hashcode方法,新进行hashcode比较,如果不同,那么就没必要在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的。

  1. 为什么重写equals()时必须重写hashcode()方法?

因为两个相等的对象的hashCode值必须相等。也就是说如果equals方法判断两个对象是相等的,那么这两个对象的hashCode值也要等。

如果重写equals()时没有重写hashCode()方法的话就可能会导致equals方法判断时相等的两个对象,hashCode值却不相等。

思考:重写equals()时没有重写hashCode()方法的话,使用HashMap可能会出现什么问题。

总结:

  • equals方法判断两个对象是相等的,那么这两个对象的hashCode值也要相等

  • 两个对象有相同的hashCode值,他们也不一定是相等的(哈希碰撞)

  1. Comparable和Comparator的区别

  • comparable接口实际上是出自java.lang包,它有一个compareTo(Object obj)方法用来排序

  • comparator接口实际上是出自java.util包它有一个compare(Object obj1,Object obj2)方法用来排序

一般我们需要对一个集合使用定义排序时,我们就要重写compareTo()方法或compare()方法,当我们需要对某一个集合实现两种排序方式,比如一个song对象中的歌名和歌手名分别采用一种排序方法的话,我们可以重写comparaTo()方法和使用自制的Comparator方法或者以两个Comparator来实现歌名排序和歌手名排序,第二种代表我们只能使用两个参数版的Collections.sort()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值