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 是比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。 

 

posted @ 2016-09-20 15:30  Hesier  阅读(161)  评论(0编辑  收藏  举报