自然排序和定制排序(list)

自然排序和定制排序(list)

定制排序

Comparator
list.sort(Comparator)
Collections.sort(List , Comparator)
一般在创建的集合的时候才会去创建Comparator对象进行排序

自然排序

Comparable
Collections.sort(List)
自然排序 一般都是写在对象那里 由对象类进行实现 Comparable
然后重写方法即可

排序规则

两个都是接口 都是对比大小
都是对字段进行大小对象
如果等于 说明相等
如果小于0 则小于  降序排序
如果大于0 则大于  升序排序
注意排序的时候一定要写一类对象

定制排序

创建一个comparator对象中调用Comparator的匿名类重写comparator方法

list集合
List list = new ArrayList();
list.add(new User("ll",1));
list.add(new User("ll",4));
list.add(new User("ll",3));
定制排序
Comparator<User> comparator = new Comparator<User>() {
    @Override
    public int compare(User o1, User o2) {
        //对比User的name值
        int date = o1.Name().compareTo(o2.Name());
        if (date!=0) {
            return date;
        }else {
            return Integer.compare(o1.Age(), o2.Age());
        }
    }
};
list.sort(comparator);
Iterator er = list.iterator();

注意:程序生成的compare方法传入的是object类型,需要转成指定类型

自然排序

自然排序在类中实现compareTo接口并重写comparator方法

自然排序
            Collections.sort(list);

User类

class User implements Comparable<User> {
    private String name;
    private int age;
    public User(String name,int age){
        this.name=name;
        this.age=age;
    }

    public String Name(){return name;}
    public int Age(){return age;}

    @Override
    public int compareTo(User o) {
        int data = this.name.compareTo(o.name);
        if (data != 0)
            return data;
        else
            return Integer.compare(this.age,o.age);
    }

    public String toString(){return "名字:" + name +"年龄:" + age;}
}

定制排序调用方式

将排序规则传到集合里面去

list.sort(comparator);
Collections.sort(list,comparator);