五.Comparable和Comparator接口

Comparable用于对象的自然排序,由实体类实现,而Comparator则用于外部定制排序,适用于无法修改实体类的情况。Comparable的compareTo方法根据自然顺序比较对象,Comparator的compare方法则允许自定义比较规则。两者在排序场景中各有优势,例如Java的包装类和String已实现Comparable,而Comparator常用于Arrays.sort()、Collections.sort()等排序方法,且支持Lambda表达式简化代码。

相同:都用于对象的大小比较

不同:

1.

  Comparable 内部自然排序。(实体类实现)              java.lang.Comparable

  Comparator 外部定制排序。(无法修改实体类时,直接在调用方创建)  java.util.Comparator

2.

(1)Comparable是排序接口,若一个类实现了该接口,那么该类的对象就可以进行比较排序。接口中只有一个方法:compareTo(o)方法

   具体的比较规则是按照 compareTo 方法中的规则进行。这种顺序称为 自然顺序

 compareTo 方法的返回值有三种情况:

    • o1 > o2   o1.compareTo(o2) > 0
    • o1 = o2   o1.compareTo(o2) = 0  
    • o1 < o2   o1.compareTo(o2) < 0  

(2)java中包装类,String类实现了Comparable接口

(3)排序后,默认按照升序排列

3.(1)Comparator是排序接口,可以通过实现Comparator来创建一个比较器,然后通过这个比较器对对象进行排序。该接口中有一个方法:compare(o1, o2) 

   称为定制排序

  compare(o1, o2) 方法的返回值有三种情况:

      o1<o2  返回负数

      o1==o2  返回0

      o1>o2  返回正数

 (2)可以将比较器传入:Arrays.sort(),Collections.sort(),TreeSet(),TreeMap()

 (3)Comparator接口只有一个方法,所以可以用Lambda表达式

    Lambda表达式只能用于函数式接口,也就是只有一个抽象方法的接口

 3.

(1)对于一些普通的数据类型(比如 String, Integer, Double…),它们默认实现了Comparable 接口,实现了 compareTo 方法,我们可以直接使用。

(2)而对于一些自定义类,它们可能在不同情况下需要实现不同的比较策略,我们可以新创建 Comparator 接口,然后使用特定的 Comparator 实现进行比较。

  这就是 Comparable 和 Comparator 的区别。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值