在前几个章节中使用了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; } } }
普林斯顿公开课 算法3-9:Comparator比较器
时间: 2024-10-15 17:20:00