Comparable和Comparator接口

Comparable 是排序接口;若一个类实现了 Comparable 接口,就意味着 “该类支持排序”。而 Comparator 是比较器;我们若需要控制某个类的次序,可以建立一个 “该类的比较器” 来进行排序。

1.若一个类实现了Comparable 接口,实现 Comparable 接口的类的对象的 List 列表 ( 或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序。

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; //升序
        return o.age-this.age; //降序
    }  
    @Override   
    public String toString()  
    {  
        return name+":"+age;  
    }  
}  
public class Test {
    
    public static void main(String[] args) {
        Person1 person1 = new Person1("zzh",18);  
        Person1 person2 = new Person1("jj",17);  
        Person1 person3 = new Person1("qq",19);  
   
        List<Person1> list = new ArrayList<>();  
        list.add(person1);  
        list.add(person2);  
        list.add(person3);  
   
        Collections.sort(list);  
        System.out.println(list);  
        
        Person1[] a={person1,person2,person3};
        Arrays.sort(a);
        System.out.println(a[0]);
    }
}

2.对类自身无法修改这就用到了Comparator这个接口(策略模式)。

    public final class Person2  
    {  
        private int age;  
        private String name;  
      
        public Person2(String name, int age)  
        {  
            this.name = name;  
            this.age = age;  
        }  
      
        @Override   
        public String toString()  
        {  
            return name+":"+age;  
        }  
      
        //getter and setter方法省略....  
    }  
public class Test {
    public static void main(String[] args) {
        Person2 p1 = new Person2("zzh", 18);
        Person2 p2 = new Person2("jj", 17);
        Person2 p3 = new Person2("qq", 19);
        List<Person2> list2 = new ArrayList<Person2>();
        list2.add(p1);
        list2.add(p2);
        list2.add(p3);

        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();
            }
        });
        System.out.println(list2);
    }
}
原文地址:https://www.cnblogs.com/mcahkf/p/8607960.html