前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java中 Comparable和 Comparator的区别及联系

Java中 Comparable和 Comparator的区别及联系

作者头像
呼延十
发布2019-07-01 17:13:21
1.3K0
发布2019-07-01 17:13:21
举报
文章被收录于专栏:呼延呼延

其实我现在觉得关系不是很大…但是在今天及以前我也一直很迷惑,所以还是将自己的一些理解写出来备忘.

Comparable

Comparable定义在java.lang包里,意味着可以被比较的能力,因此某个类想要可以被排序,被比较大小,需要实现这个接口.

代码语言:javascript
复制
public int compareTo(T o);

接口里只定义了这一个方法,代表了:传入一个对象,将对象和元素自身进行比较,如果元素自身大,返回1,相等返回0,元素自身小于参数则返回-1.

例如:

代码语言:javascript
复制
    private static class Student implements Comparable {
        int id;
        String name;
        int age;

        @Override
        public int compareTo(Object o) {
            return this.id - ((Student) o).id;
        }
    }

代码中定义了Student类,以及实现了Comparable,即只比较他们的id的大小即可.

Comparator

Comparator定义与java.util包中,代表着一个角色,这个角色的功能是对传入的两个元素进行大小的比较,并且返回结果.

代码语言:javascript
复制
int compare(T o1, T o2);

这是最主要的一个方法,我们需要传入两个同一类型的元素.

使用示例:

代码语言:javascript
复制
    private static class StudentCom1 implements Comparator<Student>{

        @Override
        public int compare(Student o1, Student o2) {
            return o1.id - o2.id;
        }
    }

代码中定义了一个Student的比较器,实现了Comparator.

他们的区别及联系

那么问题来了,都有Comparable了,还要Comparator干什么?

设想一个场景,我们定义了一个学生类,如上面代码所示,那么学生可以按着id的大小进行排序.

然后现在有两个使用的地方,第一个是考试,需要学生按照id排序.第二个是学生统计,需要学生按照年龄进行排序.

怎么实现两种完全不同的排序方式呢?或者更极端一点,一会需要按照id增序,一会需要按照id降序呢?改源代码肯定是不科学的.

这个时候就可以采用以下方案:

  1. 学生实现自然排序,即最通用的那种排序方式,比如按照id增序.
  2. 实现几个不同的比较器,比如运动会比较器,吃饭比较器等等.
  3. 在需要默认排序的情况下,直接调用学生的comparTo即可.
  4. 在特定情景下,调用集合类的排序方法,传入一个想要的比较器即可.

总结

他们的区别是角色不同,想要实现的目的也不同.一个是内部自然排序,只能有一种定义.一个是外部的比较器,可以定义多个不同的比较器,按需取用.

唯一的联系可能就是他们最终都是对两个元素定义一个孰大孰小?

ChangeLog

2019-05-02 完成

以上皆为个人所思所得,如有错误欢迎评论区指正。

欢迎转载,烦请署名并保留原文链接。

联系邮箱:huyanshi2580@gmail.com


本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Comparable
  • Comparator
  • 他们的区别及联系
  • 总结
    • ChangeLog
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档