栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Comparber接口和Comparator接口比较俩个数大小

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Comparber接口和Comparator接口比较俩个数大小

一、作用

1 、java.lang.Comparable(优先考虑它)(自然排序接口,自然比较接口)
3、java.util.Comparator(作为上面接口的补充,备胎)(定制排序接口,定制比较接口)
上面两个接口有点像孪生兄弟,经常一起出现,所以要注意区分。这两个接口的作用:当Java的对象要比较大小时,要排序时,就要实现他们两个接口之一。

二、 举例说明

例:我们要实现学生对象的排序或比较大小
(1)要让学生类Student实现java.lang.Comparable,并且重写int compareTo(Object obj)。
默认按照年龄比较大小

public class Student implements Comparable{

    private String name;
    private int age;
    private int score;
    private double weight;

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

    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;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + ''' +
                ", age=" + age +
                ", score=" + score +
                ", weight=" + weight +
                '}';
    }

    
    @Override
    public int compareTo(Object o) {
        //假设默认是按照年龄比较大小
        Student other = (Student) o;//向下转型,为了调用o对象中的age
        return this.age - other.age;
        
    }
}


(2)、可以为学生类的对象比较成绩但是声明一个类StudentScoreComparator,实现java.util.Comparator接口,重写接口的int compare(Object o1, Object o2)

public class StudentScoreComparator  implements Comparator {
    
    @Override
    public int compare(Object o1, Object o2) {
        //比较两个学生对象的成绩
        Student s1 = (Student) o1;
        Student s2 = (Student) o2;
        return s1.getScore() - s2.getScore();
         
    }
}

(3)测试类

public class TestCompare {
    public static void main(String[] args) {
        Student s1 = new Student("张三",24,89, 75.5);
        Student s2 = new Student("李四",24,85,62.0);

        //比较s1和s2的大小,默认按照年龄比较大小的
        System.out.println("按照年龄比较:");
        if(s1.compareTo(s2)>0){
            System.out.println("s1 > s2");
        }else if(s1.compareTo(s2)<0){
            System.out.println("s1 < s2");
        }else{
            System.out.println("s1 = s2");
        }

        System.out.println("按照成绩比较:");
        //需要调用StudentScoreComparator类的非静态compare方法比较两个学生对象的成绩
        StudentScoreComparator sc = new StudentScoreComparator();
        if(sc.compare(s1,s2) > 0){
            System.out.println("s1的成绩 高于 s2的成绩");
        }else if(sc.compare(s1,s2) < 0){
            System.out.println("s1的成绩 低于 s2的成绩");
        }else{
            System.out.println("s1的成绩 等于 s2的成绩");
        }
 }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572663.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号