比较器Comparable与Comparator实践

来源:互联网 发布:视频录制软件哪个好 编辑:程序博客网 时间:2024/06/06 00:30

比较器Comparable与Comparator实践

Comparable:该比较器是用于对象的内部比较,比较的是属性。它的方法:

 public int compareTo(T o);

Comparator:该比较器用于对象的外部比较,比较的是对象,一般这个比较的对象也实现了Comparable接口。Comparator的方法有多个,但一般我们只需要实现:

int compare(T o1, T o2);

实例代码:

声明一个People类,实现Comparable接口,内部排序优先级,city>age>name>sex。

public class People implements Comparable<People> {    public String name;    public int sex;    public String city;    public int age;    public People(String name, int sex, String city, int age) {        this.name = name;        this.sex = sex;        this.city = city;        this.age = age;    }    @Override    public String toString() {        return "People{" +                "name='" + name + '\'' +                ", sex=" + sex +                ", city='" + city + '\'' +                ", age=" + age +                '}';    }    /**     * 比较规则优先级:city>age>name>sex     */    @Override    public int compareTo(People people) {        int result = 0;        if (people == null) return result;        //比较city        result = people.city.compareTo(city);//String实现了Comparable接口        if (result == 0) {//city 相同            result = people.age - age;//比较age        }        if (result == 0) {//   age相同            result = people.name.compareTo(name);//比较name        }        if (result == 0) { //name相同            result = people.sex - sex;//比较sex        }        return result;    }}

实现一个Comparator比较器

public class PeopleComparator implements Comparator<People> {    @Override    public int compare(People people1, People people2) {        if (people1 != null && people2 != null) {            return people2.compareTo(people1);//后者和前者比较        }        return 0;    }}

测试代码实现:

public class Test {    public static void main(String[] args) {        List<People> list = new ArrayList<>();        list.add(new People("moly", 1, "shanghai", 24));        list.add(new People("lili", 1, "beijing", 25));        list.add(new People("pop", 1, "shenzhen", 24));        list.add(new People("momo", 0, "shanghai", 23        ));        System.out.println(list.toString());        Collections.sort(list,new PeopleComparator());        System.out.println(list.toString());    }}

打印结果:

sort before:[People{name='moly', sex=1, city='shanghai', age=24}, People{name='lili', sex=1, city='beijing', age=25}, People{name='pop', sex=1, city='shenzhen', age=24}, People{name='momo', sex=0, city='shanghai', age=23}]sort after:[People{name='lili', sex=1, city='beijing', age=25}, People{name='momo', sex=0, city='shanghai', age=23}, People{name='moly', sex=1, city='shanghai', age=24}, People{name='pop', sex=1, city='shenzhen', age=24}]
0 0
原创粉丝点击