【JavaSE】Comparable接口和Comparator接口

一、Comparable接口

当我们要比较两个类的大小时,我们该如何比较呢,是这样吗?
在这里插入图片描述

这样写是错误的,所以我们需要用到接口Comparable的CompareTo方法。

而ComparaTo是抽象方法,所以我们可以根据我们的需求进行重写。
在这里插入图片描述


class Student implements Comparable<Student>{ //<Student>是泛型内容先不用管谁实现这个接口就写谁
    public String name;
    public int age;
    public double score;

    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
    //通过年龄进行比较
    @Override
    public int compareTo(Student o) {
        return this.age - o.age;    //this谁调用该方法就是谁,o是传入的对象。
    }

}

public class Test1 {
    public static void main(String[] args) {
        Student student1 = new Student("张三",19, 86);
        Student student2 = new Student("李四",23, 84);
        
        if(student1.compareTo(student2) > 0) {
            System.out.println("student1 > student2");
        }else if(student1.compareTo(student2) == 0) {
            System.out.println("student1 = student2");
        }else {
            System.out.println("student1 < student2");
        }
    }
}

在这里插入图片描述李四年龄大于张三返回一个负数

当然也可以通过名字进行比较:
在这里插入图片描述
因为字符串是String类型,而 String 已经实现了Comparable接口的 compareTo() 方法.

在这里插入图片描述在这里插入图片描述

当然也可以根据成绩进行比较:
在这里插入图片描述

但是当我们这么些时就会有写的很死,如你重写了compareTo()方法,用年龄进行比较,以后的都需要用年龄比较,所以我们了解另一个接口Comparator。



二、Comparator接口


在使用Comparator接口时,我们主要用到 compare() 方法进行比较,所以重写 compare() 抽象方法。

import java.util.Comparator;

class Student {
    public String name;
    public int age;
    public double score;

    public Student(String name, int age, double score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }
}
//年龄比较器
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);
    }
}
//成绩比较器
class ScoreComparator implements Comparator<Student> {
    @Override
    public int compare(Student o1, Student o2) {
        return (int)(o1.score - o2.score);
    }
}

public class Test1 {
    public static void main(String[] args) {
        Student student1 = new Student("张三",19, 86);
        Student student2 = new Student("李四",23, 84);
        //成绩比较
        ScoreComparator score = new ScoreComparator();
        System.out.println(score.compare(student1,student2));
        //年龄比较
        AgeComparator age = new AgeComparator();
        System.out.println(age.compare(student1,student2));
        //名字比较
        NameComparator name = new NameComparator();
        System.out.println(name.compare(student1,student2));
    }
}

在这里插入图片描述

这样我们就可以根据我们的需求调用不同的比较器了。
注意:在使用Compartor接口时需要我们导入 import java.util.Comparator 下的Comparator接口。

好的,到这里本章节就结束了,如发现有错误,请各位大佬及时指出。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

没完没了的麦当

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

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

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

打赏作者

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

抵扣说明:

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

余额充值