Comparable和Comparator都是实现自定义比较器时需要继承的接口,但是这两个接口又是什么时候才用呢?
(1)Comparable
Comparable是在集合内部定义排序,需要实现compareTo方法,是位于java.lang包的接口。
比如:
public class Test implements Comparable{
@Override
public int compareTo(Object o) {
// 排序内容
return 0;// 排序返回结果
}
}
(2)Comparator
Comparator是在集合外部实现的排序,需要实现compare方法,是位于java.util包下的接口。
比如:
class MyComparator implements Comparator {
@Override
public int compare(Object o1, Object o2) {
// 排序内容
return 0;// 排序返回结果
}
}
总结:Comparable接口可以在类内部实现排序,不需要进行另外定义一个类,但同时也破坏了类的完整性;而Comparator接口可以在外部类中实现排序,需要时从该类中调用compare方法对目标进行排序,不会破坏类的完整性。
巧记:
Comparable以able结尾,类似形容词,必须依附名词或者代词——所以Comparable需要依附目标类,是在类内部实现排序。
Comparator是以tor结尾,类似名词,所以自己单独实现比较器,在需要的时候才对自定义比较器的实现类进行调用。