Java基础七:comparable 和 Comparator的详细介绍

comparable 和 Comparator的区别

(1) Comparable接口实际上是出自java.lang包,它有一个compareTo(Object obj)方法来排序
(2) Comparator接口实际上是出自java.util包,它有一个compare(Object obj1,Object obj2)方法来排序
一般需要对一个集合使用自定义排序时,就要重写CompareTo方法或者compare()方法

对一个集合进行自定义排序的两种实现方法

场景:对下面的Student进行排序,排序规则:先按照名字排序,名字相同按照年龄排序
Student代码片

// 自定义的学生类
public class Student {
    private String name;
    private int age;
   .....
   //get(),set()方法、toString(),有参构造等方法省略
}

方法一:使用匿名内部类的形式重写Comparator接口的compare()方法:

  Collections.sort(students, new Comparator<Student>(){
    @Override
       public int compare(Student s1, Student s2) {
         if(s1.getName()!=s2.getName()){
         		//名字不等,按照名字排序(默认升序)
            return s1.getName().compareTo(s2.getName());
           }else {
           //名字相等,按照年龄升序排序
            return s1.getAge()-s2.getAge();
          }
     }
});

方法二:Student类中实现Comparable接口,并重写compareTo()方法

public class Student implements Comparable<Student> {
    private String name;
    private int age;
   .....g
   //get(),set()方法、toString(),有参构造等方法省略
    @Override
    public int compareTo(Student s) {
        if (this.getName() != s.getName()) {
        //名字进行比较,默认升序
            return this.getName().compareTo(s.getName());
        } else {
        //比较年龄
            return this.getAge() - s.getAge();
        }
    }
}
// 调用排序方法,如果Student类中没有重写Comparable接口的compareTo()方法则会出错
Collections.sort(students);

两种实现方法的比较
方法一:匿名内部类的方式,需要使用的时候,再重写方法,可以自己定义重写的规则,适用于一个集合在不同场景下不同排序的规则。
方法二:在Student类中已经重写了重写Comparable接口的compareTo()方法,规则已经固定了,适合固定的排序规则的情况下。

部分内容来自网络,侵删

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值