1. 概述
Comparator 和 Comparable都是java的一个接口, 并且是用来对自定义的class比较大小的。
2. Comparable
Comparable 定义在 Person类的内部,子类需要实现compareTo()方法:
public class Person implements Comparable {
String name;
int age
public int compareTo(Person another) {
int i = 0;
i = name.compareTo(another.name); // 使用字符串的比较
if(i == 0) { // 如果名字一样,比较年龄, 返回比较年龄结果
return age - another.age;
} else {
return i; // 名字不一样, 返回比较名字的结果.
}
}
}
这时我们可以直接用 Collections.sort( personList )
对其排序了.
3. Comparator
Comparator 是定义在Person的外部的, 此时我们的Person类的结构不需要有任何变化,子类需要实现compare()方法:
class PersonComparator implements Comparator {
public int compare(Person one, Person another) {
int i = 0;
i = one.name.compareTo(another.name); // 使用字符串的比较
if(i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果
return one.age - another.age;
} else {
return i; // 名字不一样, 返回比较名字的结果.
}
}
}
使用 Collections.sort( personList , new PersonComparator())
可以对其排序
4. 总结
comparator接口与Comparable都是接口,需要有子类实现它们,并且需要实现各自的抽象方法,抽象方法的内部逻辑基本一致,都要返回-1 、0 、1方便排序。
两种方法各有优劣,:
- 用Comparable 简单, 只要实现Comparable 接口的对象直接就成为一个可以比较的对象,但是
需要修改源代码
- 用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器,灵活度更大。