Comparator和Comparable
都可以实现排序。
Comparable 是排序接口
若一个类实现了Comparable接口,就意味着 该类支持排序 。
实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort
或Arrays.sort
进行自动排序。
实现此接口的对象可以用作有序映射(TreeMap)
中的键或有序集合(TreeSet)
中的集合,无需指定比较器。
接口中通过x.compareTo(y)
来比较x和y的大小。若返回负数,则x比y小;返回零,则x等于y;返回正数,则x大于y。
public class Person implements Comparable<Person>{
int age;
@Override
public int compareTo(Person p){
return this.age-p.getAge();
}
}
Comparator 是比较器接口
我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable
接口)。
那么我们就可以建立一个“该类的比较器”来进行排序,这个“比较器”只需要实现Comparator
接口即可。
也就是说,我们可以通过实现Comparator
来新建一个比较器,然后通过这个比较器对类进行排序。
//创建比较器
public class PersonCompartor implements Comparator<Person>{
@Override
public int compare(Person p1, Person p1){
return p1.getAge() - p1.getAge();
}
}
// 使用比较器
Arrays.sort(peopleArray, new PersonCompartor());
Comparable相当于“内部比较器”(类要实现这个接口)。
而Comparator相当于“外部比较器”(通过单独的类实现比较)。