首页 > 代码库 > 普林斯顿公开课 算法3-9:Comparator比较器

普林斯顿公开课 算法3-9:Comparator比较器

在前几个章节中使用了Comparable作为比较函数。比如对于字符串,就是按字母表的顺序进行排序。有时候想要换一种比较方式,该怎么实现呢?


在Java中可以使用Comparator比较器,以下代码展示了字符串之间不同的比较方式。


String[] a;
...
Arrays.sort();
...
Arrays.sort(a, String.CASE_INSENSITIVE_ORDER);
Arrays.sort(a, Collator.getInstance(new Locale("es"));
Arrays.sort(a, new BritishPhoneBookOrder());



Comparator的实现方式就是继承Comparator类,然后重载compare方法即可。


有时候在实现一个类的时候,可以提供多种比较方法,比如一个学生对象,可以按照名字来排序,也可以按照年级来排序。所以代码可以写成这样:

public class Student {
    public static final Comparator<Student> BY_NAME = new ByName();
    public static final Comparator<Student> BY_SECTION = new BySection();
 
    private final String name;
    private final int section;
 
    private static class ByName implements Comparator<Student> {
        public int compare(Student a, Student b)  {
            return a.name.compareTo(b.name);
        }
    }
 
    private static class BySection implements Comparator<Student> {
        public int compare(Student a, Student b) {
            return a.section - b.section;
        }
    }
}