定制排序

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

自然排序

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

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

定制排序

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

  1. List list = new ArrayList();
  2. list.add(new User("ll",1));
  3. list.add(new User("ll",4));
  4. list.add(new User("ll",3));
  1. Comparator<User> comparator = new Comparator<User>() {
  2. @Override
  3. public int compare(User o1, User o2) {
  4. //对比User的name值
  5. int date = o1.Name().compareTo(o2.Name());
  6. if (date!=0) {
  7. return date;
  8. }else {
  9. return Integer.compare(o1.Age(), o2.Age());
  10. }
  11. }
  12. };
  13. list.sort(comparator);
  14. Iterator er = list.iterator();

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

自然排序

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

  1. Collections.sort(list);
  1. class User implements Comparable<User> {
  2. private String name;
  3. private int age;
  4. public User(String name,int age){
  5. this.name=name;
  6. this.age=age;
  7. }
  8. public String Name(){return name;}
  9. public int Age(){return age;}
  10. @Override
  11. public int compareTo(User o) {
  12. int data = this.name.compareTo(o.name);
  13. if (data != 0)
  14. return data;
  15. else
  16. return Integer.compare(this.age,o.age);
  17. }
  18. public String toString(){return "名字:" + name +"年龄:" + age;}
  19. }

定制排序调用方式


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