java集合中Camparale与Camparator的区别

一、Comparable:
        Comparable:接口,位于  java.lang包下,实现了这个接口,就让这个类具备了可比较(排序)的能力 如果我想对一个Person类型的集合进行排序,应该怎么办?让Person类实现Comparable接口
 
        使用步骤:
                1. 让类实现Comparable接口
                2. 重写里面的方法: compareTo
                         升序:用this和参数作比较
                         降序:用参数和this做比较
                3. 调用Collections.sort()方法进行排序

            Comparable中方法的重写案例:
    @ Override
    public int compareTo(Person o) {
         //如果用当前对象和参数的对象比较得到的就是升序
         //如果用参数的对象和当前的对象比较得到的就是降序
         //return this.age - o.age;   //这样为升序
         //return o.age - this.age;   //这样为降序
          return this .name.compareTo(o.name);//注意:此处的compareTo方法是字符串中的方法,name为一个字符串类型,直接调用的字符串的字符串重写的compareTo方法
    }

二、Comparator:
        Comparator: 位于java.util包下, 也是用来排序的,对于那些不想实现Comparable接口的类,或者对于里边的实现方式不满意,我们就 可以使用Comparator接口重新定义排序规则     
    Collections.sort(List<T>t,Comparator c);       
  
         使用步骤:
                1. 写一个比较器,实现Comparator接口:子类
                2. 重写里边的compare方法,定义自己的排序规则
                3. 调用Collections.sort(list,子类的对象);
                还可以直接使用匿名内部类的方式

           调用Comparator接口(此处为匿名内部类的使用)案例:

        下面程序实现的是对自定义类的一个排序,先根据年龄进行升序,年龄相同,按照分数降序排列
      Collections.sort(list2, new Comparator<Student>() {
            //重写的compare方法中,前面参数和后面参数作比较,得到的是升序;后面参数和前面参数作比较,得到的是降序
           @Override
           public int compare(Student o1, Student o2) {      
                if(o1.getAge() == o2.getAge()){
                      return o2.getScore()>o1.getScore()?1:-1;
                }
                return o1.getAge() - o2.getAge();    
              }
          });

三、Comparable和Comparator的区别:

        Comparable: 内部的比较器,位于java.lang包下,如果一个类想要使用Collection.sort(list)方法进行排序, 则该类需要实现Comparable接口来支持排序
        Comparator: 外部比较器,位于java.util包下,如果对于Comparable中的排序规则不满意,或者不想实现Comparable接口的 类,可以使用Comparator进行排序。                                             Colections.sort(list,Comparator c);  无需改变类的结构
        注:如果在一个自定类中两个都有,最后执行的结果是以Compartor为准
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值