欢迎来到之路教程(on itroad-com)

Java Comparable 示例

所有给定的示例都使用 Collections.sort() 方法对列表进行排序。
如果我们需要对相同对象的数组进行排序,只需将 Collections.sort() 替换为 Arrays.sort() 。

对字符串列表进行排序

使用 Comparable 接口对字符串列表进行排序的 Java 程序。

ArrayList<String> list = new ArrayList<>();
list.add("E");
list.add("A");
list.add("C");
list.add("B");
list.add("D");
Collections.sort(list);
System.out.println(list);

输出:

[A, B, C, D, E]

排序整数列表

使用 Comparable 接口对整数列表进行排序的 Java 程序。

ArrayList<Integer> list = new ArrayList<>();

list.add(10);
list.add(300);
list.add(45);
list.add(2);
list.add(5);
//Natural order
Collections.sort(list);
System.out.println(list);
//Sort in reverse natural order
Collections.sort(list, Collections.reverseOrder());
System.out.println(list);

输出:

[2, 5, 10, 45, 300]
[300, 45, 10, 5, 2]

Java Comparable 接口

public interface Comparable<T> 
{
	public int compareTo(T o);
}

compareTo() 方法

对于任何支持自然排序的类,它应该实现 Comparable 接口并覆盖它的 compareTo() 方法。
它必须返回负整数、零或者正整数,因为此对象小于、等于或者大于指定的对象。

请注意,如果 y.compareTo(x)抛出异常,则该方法必须抛出异常。
此外,关系必须是可传递的,例如:(x.compareTo(y)>0 && y.compareTo(z)>0) 意味着 x.compareTo(z)>0 。

例如,对于Employee类,自然排序可以基于它的雇员id

import java.time.LocalDate;
public class Employee implements Comparable<Employee> {
    private Long id;
    private String name;
    private LocalDate dob;

    @Override
    public int compareTo(Employee o) 
    {
        return this.getId().compareTo( o.getId() );
    }
}

所有包装类和 String 类都实现了 Comparable 接口。
包装类按它们的值进行比较,字符串按字典序进行比较。

Collections.sort() 和 Arrays.sort()

  • 使用 Collections.sort() 方法对对象列表进行排序。
  • 使用 Arrays.sort() 方法对对象数组进行排序。

Collections.reverseOrder()

此实用程序方法返回一个 Comparator,该 Comparator 对实现 Comparable 接口的对象集合强加自然顺序的相反顺序。

这为排序(或者维护)以反向自然顺序实现 Comparable 接口的对象的集合(或者数组)提供了一个简单的习惯用法。

Java Comparable 接口

Java Comparable 接口用于根据对象的自然顺序对数组或者对象列表进行排序。

Java Comparable 接口对实现它的每个类的对象强加了总排序。
这种排序称为类的自然排序,类的 compareTo() 方法称为其自然比较方法。

使用 Comparable 接口,我们可以对以下元素进行排序:

  • 字符串对象
  • 包装类对象,例如 Integer、Long 等
  • 用户定义的自定义对象
日期:2020-09-17 00:09:47 来源:oir作者:oir