Comparable和Comparator的區別

相同點:java

Comparable和Comparator都是接口,用來作對象的比較而達到排序的目的。算法

不一樣點:ide

Comparable須要類自己實現它,並重寫compareTo方法,參數爲另一個同類的對象,排序的時候使用Collections.sort(Collection cl),一般是在項目中自定義的類,特別是後期須要排序的類。this

package collections;

public class Person implements Comparable<Person>
{
    private int age;
    private String name;

    public Person(String name, int age)
    {
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(Person o)
    {
        return this.age-o.age;
    }
    @Override 
    public String toString()
    {
        return name+":"+age;
    }
}

 

Person person1 = new Person("AA",17);
        Person person2 = new Person("BB",18);
        Person person3 = new Person("CC",19);

        List<Person> list = new ArrayList<>();
        list.add(person1);
        list.add(person2);
        list.add(person3);

        Collections.sort(list);

Comparator是須要獨立的類來實現它,並重寫compare和equals方法,一般是用在沒法繼承或者更改的類狀況,使用Collections.sort(Collection cl,Comparator cp)進行排序code

Person p1 = new Person("AA",18);
        Person p2 = new Person("BB",17);
        Person p3 = new Person("CC",19);
        List<Person> list = new ArrayList<Person>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        Collections.sort(list,new Comparator<Person>(){

            @Override
            public int compare(Person o1, Person o2)
            {
                if(o1 == null || o2 == null)
                    return 0;
                return o1.getAge()-o2.getAge();
            }

        });

在《Effective Java》一書中,做者Joshua Bloch推薦你們在編寫自定義類的時候儘量的考慮實現一下Comparable接口,一旦實現了Comparable接口,它就能夠跟許多泛型算法以及依賴於改接口的集合實現進行協做。你付出很小的努力就能夠得到很是強大的功能對象

相關文章
相關標籤/搜索