public static <T extends Comparable<? super T>> void sort(List<T> list) { list.sort(null); }
public static <T> void sort(List<T> list, Comparator<? super T> c) { list.sort(c); }
Let's first demonstrate the first method using a primitive type (Integer here):
static List<Integer> intList = Arrays.asList(2, 3, 1); // positive sequence Collections.sort(intList); //flashback Collections.sort(intList,new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { // The return value is int type, greater than 0 means positive order, less than 0 means reverse order return o2-o1; } });
Next, look at the sorting of custom classes:
public class Emp{ private int empno; private String ename; public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public Emp(int empno, String ename) { super(); this.empno = empno; this.ename = ename; } @Override public String toString() { return "empno:\t"+empno+"\tename:\t"+ename; } }
//Defined list static List<Emp> empList; static { Emp emp1 = new Emp(2,"Guan YunChang"); Emp emp2 = new Emp(3,"Zhang Fei"); Emp emp3 = new Emp(1,"Liu Bei"); empList = Arrays.asList(emp1,emp2,emp3); } // method to implement sorting Collections.sort(empList,new Comparator<Emp>() { @Override public int compare(Emp o1, Emp o2) { /* Sort by employee number in positive order*/ return o1.getEmpno()-o2.getEmpno(); /* sort by employee number in reverse order */ // return o2.getEmpno()-o1.getEmpno(); /* Sort by employee name in positive order */ //return o1.getEname().compareTo(o2.getEname()); /* sort by employee name in reverse order */ //return o2.getEname().compareTo(o1.getEname()); } });
If you use Collections.sort(empList) directly; you need to implement the Comparator interface in the Emp class
public class Emp implements Comparable<Emp>{ private int empno; private String ename; public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public Emp(int empno, String ename) { super(); this.empno = empno; this.ename = ename; } @Override public String toString() { return "empno:\t"+empno+"\tename:\t"+ename; } @Override public int compareTo(Emp emp) { /* Sort by employee number in positive order*/ //return this.getEmpno()-emp.getEmpno(); /* sort by employee number in reverse order */ //return emp.getEmpno()-this.getEmpno(); /* Sort by employee name in positive order */ //return this.getEname().compareTo(emp.getEname()); /* sort by employee name in reverse order */ return emp.getEname().compareTo(this.getEname()); } }
Implemented using the first form of the Collections.sort method:
Collections.sort(empList);