Comparable 定义(只包含一个方法):
package java.lang;
import java.util.*;
public interface Comparable<T> {
public int compareTo(T o);
}
Comparator 定义(Comparator 接口仅仅只包括两个函数):
package java.util;
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}
- Comparator位于包java.util下,而Comparable位于包 java.lang下
- Comparable & Comparator 都是用来实现集合中元素的比较、排序,区别:Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序。
- 自定义的类要在加入list容器中后能够排序,可以实现Comparable接口,在用Collections类的sort方法排序时,如果不指定Comparator,那么就以自然顺序排序,这里的自然顺序就是实现Comparable接口设定的排序方式。
- Comparable是排序接口;若一个类实现了Comparable接口,就意味着“该类支持排序”;而Comparator是比较器;我们若需要控制某个类的次序,可以建立一个“该类的比较器”来进行排序。
- 用 Comparator 是策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。