java中的自定义比较器,对象数组的排序

273 阅读1分钟

Comparable 和 Comparator都是通过接口的方式实现自定义排序。

区别在于, Comparable需要在类中覆盖compareTo方法,Comparator新定义一个类并覆盖compare方法。 Comparable书写简洁,Comparator不用修改原先的代码。

Comparable用法

class Person implements Comparable<Person>{
    public String name;
    public int age;
    Person(String name, int age){
        this.name = name;
        this.age = age;
    }
    @Override
    public int compareTo(Person per){
        if(this.age == per.age){
            return this.name.compareTo(per.name);
        }
        return this.age - per.age;
    }
}

Array.sort(PersonList)

Comparator用法

  1. 即插即用
Arrays.sort(persons, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                if(o1.age == o2.age){
                    return o1.name.compareTo(o2.name);
                }
                return o1.age - o2.age;
            }
        });
  1. 事先定义
class PersonComparator implements Comparator<Person> {

    public int compare(Person one, Person another) {
        int i = 0;
        i = one.name.compareTo(another.name); // 使用字符串的比较
        if(i == 0) { // 如果名字一样,比较年龄,返回比较年龄结果
            return one.age - another.age;
        } else {
            return i; // 名字不一样, 返回比较名字的结果.
        }
    }
}
Arrays.sort(PersonList, new PersonComparator());

Note:1:升序;-1:降序。