Java学习(92)Java集合排序——关于compareTo()方法、Comparable和Comparator的区别

Java集合排序——关于compareTo方法、Comparable和Comparator的区别

关于compareTo()方法

在学习Comparable接口时,我们用到了compareTo()方法,用于对对象属性进行比较,根据返回结果进行排序。那么基本数据类型的包装类和字符串也都有compareTo()方法,下面分别来看一下:


  1. 基本数据类型以Integer为例,来看一下Integer类的compareTo()方法
    public int compareTo(Integer anotherInteger)
    这里的compareTo()方法的参数是要比较的Integer对象
    对于返回值,如果调用compareTo()方法的对象等于参数,则返回0;如果大于参数,则返回一个大于0的值;如果小于参数,则返回一个小于0的值。
    案例代码和运行效果如下,可以看到相等时返回0,大于参数时返回值1,小于参数时返回-1。


运行结果:


  1. String的compareTo()方法
    public int compareTo(String anotherString)
    这个方法是按字典顺序比较两个字符串,比较的是字符串中每个字符的unicode值。
    对于返回值,如果两个字符串相等,则返回值为0;如果字符串对象比参数小,则返回一个小于0的数;如果字符串对象比参数大,则返回一个大于0的数。
    案例代码和运行效果如下:


运行结果:


相等的情况比较简单,返回的结果是0。对于小于和大于的情况,可以看到返回结果不都是-1和1,而是不同的值。这是它们之间的比较时,unicode值进行减法运算的结果。比如abc和bcd进行比较,a比b的unicode值小1,所以结果为-1。而abc与cde比较,a比c的值小2,所以返回值为-2。大于的情况也是如此进行比较的。

Comparable和Comparator的区别

前面我们已经学习过Comparator和Comparable接口的使用,下面来总结一下二者的区别。

  1. Comparator接口位于java.util包下,而Comparable接口位于kava.lang包下。
  2. 对于Comparator接口,可以看到它的compare()方法的参数时两个对象,比如我们对Cat类进行比较,那么这里就是两个要比较的Cat类的对象,所以可以有一个单独的类实现Comparator。


对于Comparable接口,它的方法只有一个对象作为参数,所以要比较的类需要实现Comparable接口,将当前对象与方法参数中的对象进行比较。


因此,如果使用Comparator接口,那么要比较的类和实现Comparator接口的类可以分开;如果使用Comparable接口,那么要比较的类就要实现Comparable接口才可以。
3. 关于应用场景
一般情况下如果对某个类进行排序,比如Cat类,如果使用Comparable接口的方式,那么Cat类需要实现Comparable接口。如果Cat类通过Comparable接口的方式实现排序,比如通过name排序了。那么我们还希望通过age进行排序,这时不希望修改Cat类,那此时就需要使用Comparator接口了。
因此,Comparable接口可以作为实现类的默认排序算法,Comparator接口则用于一个类的扩展排序。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值