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接口,它就能够跟许多泛型算法以及依赖于改接口的集合实现进行协做。你付出很小的努力就能够得到很是强大的功能对象

相关文章
相关标签/搜索