Comparable和Comparator

    Comparable和Comparator是用来排序的两个接口,它们都是Java集合框架中用来排序的两个成员。

    Comparable的特点:

    1、该接口下有一个方法:

public int compareTo(T o);

    负责比较当前对象与指定对象。如果当前对象小于指定对象,返回负数;如果大于指定对象,返回正数;如果等于指定对象,返回0。注意:JDK API中强烈建议(但没有严格限制)该方法与equals方法保持一致。

    2、Comparable在java.lang包下,该接口主要的功能是赋予实现了该接口的类排序的功能。

    3、在Collections和Arrays对容器内的元素进行排序时,就是使用了该接口。如Collections中的排序方法:

public static <T extends Comparable<? super T>> void sort(List<T> list);

    List中的元素必须是实现了Comparable接口的类的对象,否则编译不通过。

    该方法最后还是会调用Arrays的排序方法,在Arrays的排序方法中,由于容器中的对象实现了Comparable接口,在进行排序时会调用该接口的compareTo()方法。

    Comparator的特点:

    1、该接口下有两个方法:

int compare(T o1, T o2);
boolean equals(Object obj);

    2、与Comparable接口相比,该接口只是提供了一个比较两个对象的功能,而不是使实现了该接口的类自身有排序的功能。

    3、与Comparable接口类似,在Collections和Arrays对容器内的 元素进行排序时,除了使用默认的排序方式外,还可以指定排序方式,也就是指定Comparator。如Collections中的排序方法:

 public static <T> void sort(List<T> list, Comparator<? super T> c);

    在进行排序时,会调用方法参数c(即为实现了Comparator接口的对象)指定的排序方式。

 

   按照我的理解,简单点来说,Comparable实现了对象本身和另外一个对象的比较,而Comparator则实现了两个对象之间的比较。在集合比较中,Comparable要求比较的对象必须是实现了Comparable接口的对象,而Comparator则要求比较的两个对象必须与容器内元素的类型一致。

你可能感兴趣的:(Comparable和Comparator)