java~搞懂Comparable接口的compareTo方法

打印 上一主题 下一主题

主题 848|帖子 848|积分 2544

Comparable 接口的 compareTo 方法的升序或降序取决于实现该接口的类的具体实现。按照惯例,compareTo 方法应该返回负数、零或正数来指示当前对象是小于、等于还是大于传入的对象。具体来说:

  • 如果 this 对象小于传入的对象,则 compareTo 应该返回负数。
  • 如果 this 对象等于传入的对象,则 compareTo 应该返回零。
  • 如果 this 对象大于传入的对象,则 compareTo 应该返回正数。
通常情况下,这样的实现会使 compareTo 方法按照升序排序。但是,你也可以通过在返回语句中反转比较结果来实现降序排序。这完全取决于具体的实现。
单字段排序

下面是一个示例,演示了一个自定义类 Person 实现了 Comparable 接口,并使用 compareTo 方法按照年龄进行排序:
  1. public class Person implements Comparable<Person> {
  2.     private String name;
  3.     private int age;
  4.     // 构造函数、getter 和 setter 方法省略
  5.     @Override
  6.     public int compareTo(Person other) {
  7.         // 按照年龄升序排序
  8.         return this.age - other.age;
  9.     }
  10. }
复制代码
在这个示例中,compareTo 方法返回的结果是根据年龄比较的,如果调用 person1.compareTo(person2),返回的结果将是负数、零或正数,分别表示 person1 的年龄小于、等于或大于 person2 的年龄。
多字段排序

如果涉及到多个字段,比如一个学生类,它有成绩和年纪,先按成绩的降序排序,当成绩相同时,再按着年纪的升序排序,这就需要我们对两个字段进行判断了,如下
  1.    @Override
  2.    public int compareTo(Student o) {
  3.            if (this.score > o.score)
  4.                    return -1;
  5.            else if (this.score < o.score)
  6.                    return 1;
  7.            else {
  8.                    return this.age-o.age;
  9.            }
  10.    }
复制代码
或者先判断是否不相同,这样两层if也可以了
  1.         @Override
  2.         public int compareTo(Student o) {
  3.                 if (this.score != o.score)
  4.                         return (int) (o.score - this.score);
  5.                 else
  6.                         return this.age - o.age;
  7.         }
复制代码
总之,Comparable 接口的 compareTo 方法的升序或降序取决于具体的实现,你可以根据需要来决定返回的结果。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

八卦阵

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表