Collections是一个工具类,sort是其中的静态方法,是对List类型集合进行排序的,它有两种方式:
(默认实现了Comparable接口的表示形式)
1.Collections.sort(list);//直接调用,默认为升序排序。
2. sort方法默认是升序排列,如想降序可通过Comparator接口的compare方法来完成自定义排序,代码如下:
static List<Integer> list = Arrays.asList(2, 3, 1);
private static void sortMode() { System.out.println("before sort:"); PrintUtil.showList(list); System.out.println("========================="); Collections.sort(list,new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // 返回值为int类型,大于0表示正序,小于0表示逆序 return o2-o1; } }); System.out.println("after sort:"); PrintUtil.showList(intList); }
输出结果:
已经实现了降序排列。
(默认没有实现Comparable接口的表现形式,如自定义的类)
3.对于String 或 Integer这些已经实现Comparable接口的类来说,可以直接使用Collections.sort();就可以(默认是升序)
没有事项Comparable接口的类,需实现Comparable接口并重写compareTo方法。
public class Emp implements Comparable<Emp>{ /*属性、getter/setter方法、toString方法及构造方法略*/ @Override public int compareTo(Emp emp) { /*按员工编号正序排序*/ //return this.getEmpno()-emp.getEmpno(); /*按员工编号逆序排序*/ //return emp.getEmpno()-this.getEmpno(); /*按员工姓名正序排序*/ //return this.getEname().compareTo(emp.getEname()); /*按员工姓名逆序排序*/ return emp.getEname().compareTo(this.getEname()); } }
private static void sortMode() { System.out.println("before sort:"); PrintUtil.showList(list); System.out.println("========================="); Collections.sort(empList); System.out.println("after sort:"); PrintUtil.showList(list); }
实现Comparable接口后可直接调用sort方法。如想自定义排序顺序可参考 2 的步骤。
注:没有实现Comparable接口的不能直接调用sort方法
4.jdk1.8的Comparator接口有很多新增方法,其中有个reversed()方法比较实用,是用来切换正序和逆序的,代码如下:
private static void sortEmpByIDefineMode() { System.out.println("before sort:"); PrintUtil.showList(empList); System.out.println("========================="); Comparator<Emp> comparator = new Comparator<Emp>() { @Override public int compare(Emp o1, Emp o2) { /*按员工编号正序排序*/ return o1.getEmpno()-o2.getEmpno(); /*按员工编号逆序排序*/ //return o2.getEmpno()-o1.getEmpno(); /*按员工姓名正序排序*/ //return o1.getEname().compareTo(o2.getEname()); /*按员工姓名逆序排序*/ //return o2.getEname().compareTo(o1.getEname()); } }; /*新的逆序实现方式*/ Collections.sort(empList,comparator.reversed()); System.out.println("after sort:"); PrintUtil.showList(empList); }
复写的compare方法定义的是按员工编号正序排序,在使用reversed翻转后结果如下:
这样就使得排序规则的切换更为方便了。