Java中Comparator、Comparable的比较功能

Comarable和Comparator都是用来实现集合中元素的比较、排序的,Comparable是在集合内部定义的方法实现排序,Comparator是在集合外部实现的排序,Comparable位于java.lang包,Comparator位于java.util包。

Comparable:

当前类小于参数返回负数,等于返回0,大于返回正数。

class Person implements Comparable<Person>{
    String name;
    int age;
    Person(String n, int a) {
        name = n;
        age = a;
    }

    @Override
    public int compareTo(Person person) {
        return name.compareTo(person.name);
    }
}
ArrayList<Person> list = new ArrayList<Person>();
list.add(new Person("aaa", 10));
list.add(new Person("bbb", 20));
list.add(new Person("ccc", 30));
Collections.sort(list); //这里会自动调用Person中重写的compareTo方法。

Comparator:

可以通过两种方式实现自定义排序

1.定义一个类实现Comparator接口,重写compare方法。

2.语法不同,在内部new这个接口并重写compare方法。

第一个参数小于第二个参数返回负数,相等返回0,大于返回正数。

class Person {
    String name;
    int age;
    Person(String n, int a) {
        name = n;
        age = a;
    }
}
class DemoComparator implements Comparator<Person> {
    @Override
    public int compare(Person a, Person b) {
        return a.name.compareToIgnoreCase(b.name);
    }
}
class Demo {
    public static void main(String[] args) {
        List<Person> persons = Arrays.asList(
            new Person("Joe", 24),
            new Person("Pete", 18),
            new Person("Chris", 21)
        );
        Collections.sort(persons, new DemoComparator());
        System.out.println(persons);
        //[{name=Chris, age=21}, {name=Joe, age=24}, {name=Pete, age=18}]
        Collections.sort(persons, new Comparator<Person>() {
            @Override
            public int compare(Person a, Person b) {
                return a.age < b.age ? -1 : a.age == b.age ? 0 : 1;
            }
        });
        System.out.println(persons);
        //[{name=Pete, age=18}, {name=Chris, age=21}, {name=Joe, age=24}]
    }
}
原文地址:https://www.cnblogs.com/DreamFather/p/14581098.html