> 文章列表 > Comparable 怎么判断是升序还是降序

Comparable 怎么判断是升序还是降序

Comparable 怎么判断是升序还是降序

Comparable 接口的 compareTo 方法的返回值决定了排序的顺序。它有三种可能的返回值:

  • 小于 0:排序在前升序排序。
  • 等于 0:相等。不变动位置。
  • 大于 0:排序在后。降序排序。
    什么是”排序在前“、”排序在后“?
  • 小于 0 的值时,表示该对象在排序后的序列中应排在前面,以升序为例,该对象的排序顺序更小。这称为“排序在前”。
  • 大于 0 的值时,表示该对象在排序后的序列中应排在后面,以升序为例,该对象的排序顺序更大。这称为“排序在后”。
    也就是说,当 compareTo 方法返回负数时,表示该对象按照排序规则应排序在其他对象前面,所以称为“排序在前”;返回正数时,表示该对象应排序在其他对象后面,所以称为“排序在后”。
    所以,如果 compareTo 方法的返回值是:
  • 负数:则为升序排序
  • 正数:则为降序排序

举个例子:

public class Person implements Comparable<Person> {private int age;public Person(int age) {this.age = age;}@Overridepublic int compareTo(Person o) {// 升序排序return this.age - o.age; }
}

这里的返回值是 this.age - o.age,所以如果 this.age > o.age,返回值会大于 0,排序在后,降序;如果 this.age < o.age,返回值会小于 0,排序在前,升序。
而如果要降序排序,只需要将返回值取相反数即可:

@Override
public int compareTo(Person o) {// 降序排序return o.age - this.age; 
}

现在 this.age > o.age 返回值会小于 0,排序在前,升序;this.age < o.age 返回值会大于 0,排序在后,降序。
所以,总结来说,Comparable 的 compareTo 方法返回值决定了排序顺序:

  • 负数:升序
  • 正数:降序