2021.04.06内部、外部比较器

24 篇文章 1 订阅

比较器

内部比较器Comparable

  /**
     * 两个对象对比大小的方法
     * @param obj 另一个对象
     * @return 当前对象如果比传入的对象大,则返回整数,如果小,返回负数,如果相同,返回0
     */
int compareTo(Object obj);

注意 compareTo 不是自己定义的compareTo方法 而是String中compareTo
【1】引用数据类型的数据也是可以比较大小
【2】如果想要比较大小,对象需要实现Comparable
【3】重写里面的compareTo方法,比较两个值做一个减法
【4】我们根据返回的值是正数、负数、还是0,就可以知道那个对象的大小了

public class Student implements  Comparable<Student>{

    private   String  name;

    private   int  age;

    public Student(){}

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

    public String getName() {
        return name;
   }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
    @Override
    public int compareTo(Student o) {

        int  a= this.age;//比较时候前面对象中age属性
        int b= o.age;//传递进来的对象中age属性
        String  aa=this.name;

        String  bb=o.name;
        //注意 compareTo  不是自己定义的compareTo方法 而是String中compareTo
        return  aa.compareTo(bb);
    }
}

public class TestA {

    public static void main(String[] args) {
       /* String st1="bac8weuiwuwiew";
        String   st2="bac";
        int   n= st2.compareTo(st1);*/
       Student  stu1=new Student("zs",78);
       Student  stu2=new Student("zs",19);
        int i = stu1.compareTo(stu2);
        System.out.println(i);
    }
}

外部比较器Comparator

public class People {

    private   String  name;

    private   int  age;

    public People(){}

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

public class BJ implements Comparator<People> {
    @Override
    public int compare(People o1, People o2) {
        int age1 = o1.getAge();
        int age2 = o2.getAge();
        return age1-age2;
    }
}

总结:
1.如果实现类没有实现Comparable接口,又想对两个类进行比较(或者实现类实现了Comparator接口,但是对compareTo方法内的比较算法不满意),那么可以实现Comparator接口,自定义一个比较器,写比较算法
2.实现Comparable接口的方式比实现Comparator接口的耦合性要强一些,如果要修改比价算法,要修改Comparable接口的实现类,而实现实现Comparator的类是在外部进行比较的,不需要对实现类有任何修 改。从这个角度说,其实有些不太好,尤其在我们将实现类的.class文件打成一个.jar文件提供给开发者使用的时候。实际上实现Comparator 接口的方式后面会写到就是一种典型的策略模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~Amory

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值