定制排序
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);