此问题已经在这里有了答案:
当我们使用Comparable
接口定义对象的[[自然顺序时,自然顺序甚至意味着什么?
Comparable
接口之后,如何使用已订购的对象?该接口如何使用以及用于什么目的?compareTo()
方法中实现的。然后,在对可比较对象的集合进行排序时,此排序将是默认的排序顺序。此接口对实现它的每个类的对象强加了总体排序。此排序称为类的自然排序
compareTo
方法可用于对作为实现此接口的类的实例的对象的列表和数组进行排序。此排序称为该类的自然排序。“实现Comparable接口的对象的列表(和数组)可以由Collections.sort(和Arrays.sort)自动排序。实现此接口的对象可用作已排序对象中的键映射或作为排序集中的元素,而无需指定比较器。“
来自:https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Comparable.html
compareTo
时强制您执行的Comparable
方法来定义此顺序。此顺序应该是人类对此类型称为
自然的顺序。因此,例如,按整数(1, 2, 5, 9
)的值递增,也许按Person
s的年龄递增。作为设计师,您可以选择一些用户会觉得自然而又不会混淆您的自定义类的东西。
请参见Comparable及其Comparable#compareTo方法的文档:
此接口对实现它的每个类的对象强加了总体排序。此排序称为类的,而该类的自然排序
compareTo
方法被称为其自然比较方法。实现此接口的对象的列表(和数组)可以由Collections.sort
(和Arrays.sort
)自动排序。实现此接口的对象可以用作排序映射中的键或排序集中的元素,而无需指定比较器。public class Person implements Comparable<Person> {
private final String name;
private final int age;
// Constructor, getters, ...
@Override
public int compareTo(Person other) {
// Compare based on age, ascending
return Integer.compareTo(age, other.age);
}
}
用法类似:
Person first = new Person("John", 20); Person second = new Person("Jane", 18); Person third = new Person("Bob", 30); List<Person> persons = new ArrayList<>(); persons.add(first); persons.add(second); persons.add(third); // Ordering is now: John, Jane, Bob // Sort based on natural ordering Collections.sort(persons); // Ordering is now: Jane, John, Bob