ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Comparable与Comparator

2019-08-17 18:00:22  阅读:196  来源: 互联网

标签:Comparable Comparator Grade list int grade2 排序 public


Comparable

comparable是java的接口,该接口对实现它的每个类的对象进行整体排序。 compareTo 方法被称为它的比较方法。实现此接口的对象列表或数组可以通过 Collections.sort或 Arrays.sort进行自动排序,而无需指定比较器。

Comparator

comparator也是java的接口,对任意类型集合对象进行整体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序。

  两者的作用类似,并没有什么区别,comparator更像是对comparable的补充。比如我们定义了一个Grade类(学生成绩),该类包括了学生id、语文成绩与数学成绩,此时Grade实现Comparable接口,

重写compareTo()方法,实现按语文成绩排序。但如果需要用到按数学成绩排序的序列时,可以使用Comparator重新定义排序规则,而不需要去修改原来的排序规则。以下为代码实现:

public class Grade implements Comparable<Grade>{
    private String stuId;
    private int chinese;
    private int math;

    public String getStuId() {
        return stuId;
    }

    public void setStuId(String stuId) {
        this.stuId = stuId;
    }

    public int getChinese() {
        return chinese;
    }

    public void setChinese(int chinese) {
        this.chinese = chinese;
    }

    public int getMath() {
        return math;
    }

    public void setMath(int math) {
        this.math = math;
    }


    @Override
    public int compareTo(Grade o) {
        return this.chinese-o.chinese;
    }
}
public class Test {
    public static void main(String[] args) {
        Grade grade = new Grade();
        grade.setStuId("12");
        grade.setChinese(23);
        grade.setMath(34);

        Grade grade1 = new Grade();
        grade1.setStuId("13");
        grade1.setChinese(25);
        grade1.setMath(54);

        Grade grade3 = new Grade();
        grade3.setStuId("14");
        grade3.setChinese(12);
        grade3.setMath(59);
        List<Grade> list = new ArrayList<>();
        list.add(grade1);
        list.add(grade);
        list.add(grade3);
        System.out.println("按語文排序:");
        Collections.sort(list);
        for (Grade grade2 : list) {
            System.out.println(grade2.getStuId()+" "+grade2.getChinese()+" "+grade2.getMath());
        }

        System.out.println("按數學排序:");
        Collections.sort(list,(x,y)->{return x.getMath()-y.getMath();});
/*   Collections.sort(list, new Comparator<Grade>() {
@Override
public int compare(Grade o1, Grade o2) {
return o1.getMath()-o2.getMath();
}
});*/
for (Grade grade2 : list) { System.out.println(grade2.getStuId()+" "+grade2.getChinese()+" "+grade2.getMath()); } } }

执行结果:

重写compare方法,采用lambda表达式实现,比匿名内部类实现语法上更简单明了。

 

标签:Comparable,Comparator,Grade,list,int,grade2,排序,public
来源: https://www.cnblogs.com/menbo/p/11369630.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有