什么是自然排序以及如何使用Comparable [duplicate]

问题描述 投票:-1回答:3

此问题已经在这里有了答案:

当我们使用Comparable接口定义对象的[[自然顺序时,自然顺序甚至意味着什么?

并且在实现Comparable接口之后,如何使用已订购的对象?该接口如何使用以及用于什么目的?
java sorting comparable
3个回答
3
投票
当您自己实现接口时,“自然顺序”就是您在compareTo()方法中实现的。然后,在对可比较对象的集合进行排序时,此排序将是默认的排序顺序。

此接口对实现它的每个类的对象强加了总体排序。此排序称为类的自然排序

来自Comparable docs


0
投票
Comparable接口的compareTo方法可用于对作为实现此接口的类的实例的对象的列表和数组进行排序。此排序称为该类的自然排序。

“实现Comparable接口的对象的列表(和数组)可以由Collections.sort(和Arrays.sort)自动排序。实现此接口的对象可用作已排序对象中的键映射或作为排序集中的元素,而无需指定比较器。“

来自:https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Comparable.html


0
投票
说明

您必须通过实现在实现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

© www.soinside.com 2019 - 2024. All rights reserved.