Java比较器Comparable接口与Comparator接口的区别

Java比较器Comparable接口与Comparator接口的区别

Comparable:

内部比较器,一个类如果想要使用 Collections.sort(list) 方法进行排序,则需要实现该接口;

使用步骤:

创建一个类实现Comparable接口,并重写compareTo( ) 方法;

Comparator:

外部比较器,用于对那些没有实现Comparable接口或者对已经实现的Comparable中的排序规则不满意的情况进行排序.无需改变类的结构,更加灵活;

使用步骤:

1.创建比较器子类;

2.重写compare( )方法,对参数进行操作;

3.在集合中引入比较器对象;

作用:

Comparable和Comparator两者都是用来实现集合中元素的比较、排序的;

这两个比较器的使用,都是需要通过 Collections.sort( ) 调用的。

使用方式:

Comparable接口

1.像String、包装类等实现了Comparable接口,重写了compareTo()方法,给出了比较两个对象大小的方式;

2.像String、包装类重写compareTo()方法以后,进行了从小到大的排列;

3.对于自定义类来说,如果需要排序,我们可以让自定义实现Comparable接口,重写compareTo(obj)方法,在compareTo(obj)方法中指明如何排序;

4.重写compareTo(obj)的规则:

  • 如果当前对象this大于形参对象obj,则返回正整数,那么当前对象向后排,达到升序效果;
  • 如果当前对象this小于形参对象obj,则返回负整数,那么当前对象向后排,达到降序效果;
  • 如果当前对象this等于形参对象obj,则返回零,那么表示两个对象相等,判定为重复数据;

实现Comparable接口案例:

class Student implements Comparable<Student>{
    public String name;
    public int age;
 
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
   @Override
    public int compareTo(Student o) {
        return(this.age - o.age) 
    }
}

Comparator接口

1.当元素的类型没有实现java.lang.Comparator接口而又不方便修改代码或实现了java.lang.Comparator接口的排序规则不适当当前的操作时,那么可以考虑使用Comparator的对象排序;

2.重写compare(object o1,object o2)方法,比较o1和o2的大小:

  • ​ 如果o1大于o2,那么方法会返回正整数;
  • ​ 如果o1、o2相等,表示返回0;
  • ​ 如果o1小于o2,那么方法会返回负整数。

实现Comparator接口案例:

class AgeComparator implements Comparator<Student> {
 
    @Override
    public int compare(Student o1, Student o2) {
        return o1.age - o2.age;
    }
}
 
class NameComparator implements Comparator<Student> {
 
    @Override
    public int compare(Student o1, Student o2) {
        return o1.name.compareTo(o2.name);
    }
}

区别:

区别ComparableComparator
所在包不同java.util.Comparablejava.lang.Comparator
排序方法不同int comparaTo(Object o1)int compare(Object o1,Object o2)
排序逻辑不同在待排序的类中实现另定义一个类实现
比较方式不同内部比较器外部比较器
耦合性不同强耦合松耦合
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值