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 方法返回值决定了排序顺序:
- 负数:升序
- 正数:降序