Comparable接口&&Comparator接口

Comparable接口

首先,我们需要把Comparable接口想象成一个排序器,所谓的排序器就是给对象排序用的,这个应该懂得意思吧。

重点:
1、若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类或列表及数组可以通过Collections.sort或Arrays.sort进行自动排序。
2、实现了Comparable接口的类需要去实现一个方法
public int compareTo(T o);
在这里插入图片描述
上述的代码中
没排序的结果是:13----20------5
排序后的结果为:5----13----20

Comparator接口

一般的开发者看这个单词就知道,这是一个比较器,对两个对象进行比较的,
我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口),我们可以通过实现Comparator来新建一个比较器,然后通过这个比较器对类进行排序

该接口同样也要重写一个方法:
public int compare(T o1, T o2);


import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;


public class Text {
    class Dog{
        public int age;
        public String name;

        public Dog(int age,String name) {
            super();
            this.age = age;
            this.name = name;
        }

        @Override
        public String toString() {
            return this.name+"age:"+age;
        }
    }
    public static void main(String[] args) {
        List<Dog> list= new ArrayList<>();
        list.add(new Text().new Dog(8, "DogA"));
        list.add(new Text().new Dog(6, "DogB"));
        list.add(new Text().new Dog(7, "DogC"));
        //按年龄排序
        Collections.sort(list,new Text().new SortDogAge());
        System.out.println("给狗狗按照年龄排序:"+list);
        //按姓名排序
        Collections.sort(list,new Text().new SortDogName());
        System.out.println("给狗狗按名字字母排序:"+list);
    }

    class SortDogAge implements Comparator<Dog>{
        @Override
        public int compare(Dog o1, Dog o2) {

            return o1.age-o2.age;
        }
    }

    class SortDogName implements Comparator<Dog>{
        @Override
        public int compare(Dog o1, Dog o2) {
            return o1.name.compareTo(o2.name);
        }
    }
}

结果:

给狗狗按照年龄排序:[DogBage:6, DogCage:7, DogAage:8]
给狗狗按名字字母排序:[DogAage:8, DogBage:6, DogCage:7]


总结


1、Comparator和Comparable最根本的区别就是在于使用,一个是比较一个是排序,其他大的区别并没有什么,
2、我个人通过学习这两个接口,知道了对于方法A中调用了与其他类中方法,只要有别的类也实现了这个方法,那么就可以将这个类的对象通过方法A的参数进入方法A中参与运算,就比方说上面两个案例中的Arrays.sort和Collections.sort一样,这两个方法在内部调用了排序器和比较器,所以可以直接传一个实现了排序器内部方法和一个实现了比较器内部方法的对象进入。

———————————————————————————————————————
个人学习理解有限,希望各位多多指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值