Comparator位于包java.util下,比较器,是在集合外部定义排序。
Comparable位于包java.lang下,代表当前对象可比较的,是在集合内部实现排序。
Comparable代表一个对象内部支持排序(比如String类,Integer类,内部实现了Comparable接口) Collections.sort(list<T>)中,T必须实现Comparable接口。
Comparable只需实现compareTo()函数即可
public int compareTo(Object arg0) { // TODO Auto-generated method stub return 0; }
而 Comparator 代表着一种策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。比如对List<Integer>按照绝对值排序。Collections.sort(list<T>,comparator)。
Collections.sort(list, new Comparator<Node2>() { public int compare(Node2 o1, Node2 o2) { return 0; } //equals用于判断两个比较器是否相等,由于Object类有默认equals,因此可以不写equals public boolean equals(Object o) { return false; } });
因此可以看到,Comparator接口更加灵活!