Comparable与Comparator
Comparable对实现它的每个类的对象进行整体排序。这个接口需要类本身去实现。若一个类实现了Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 ( 或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。此外,实现 Comparable 接口的类的对象可以用作 “有序映射 ( 如 TreeMap)” 中的键或 “有序集合 (TreeSet)” 中的元素,而不需要指定比较器。
Comparable定义:
public interface Comparable<T> { public int compareTo(T o); }
Comparator定义:
public interface Comparator<T> { int compare(T o1, T o2); boolean equals(Object obj); }
举例:类Person1实现了Comparable接口
public class Person1 implements Comparable<Person1>{ private int age; private String name; public Person1(String name, int age){ this.name = name; this.age = age; } @Override public int compareTo(Person1 o){ return this.age-o.age; } @Override public String toString(){ return name+":"+age; } }
实现Comparable接口必须修改自身的类,即在自身类中实现接口中相应的方法。 如果我们的这个类无法修改(比如final修饰或者已经定义好),就用Comparator这个接口(策略模式)。
List<Person2> list2 = new ArrayList<Person2>(); Collections.sort(list2, new Comparator<Person2>(){ @Override public int compare(Person2 o1, Person2 o2){ if(o1 == null || o2 == null) return 0; return o1.getAge() - o2.getAge(); } });
总结:
Comparable 是排序接口;若一个类实现了 Comparable 接口,就意味着 “该类支持排序”。而 Comparator 是比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。