參考:https://www.cnblogs.com/huangjinyong/p/9037588.html
java集合的工具類Collections中提供了兩種排序的方法,分別是:
- Collections.sort(List list)
- Collections.sort(List list,Comparator c)
第一種稱為自然排序,參與排序的對象需實現comparable接口,重寫其compareTo()方法,方法體中實現對象的比較大小規則,示例如下:
實體類:(基本屬性,getter/setter方法,有參無參構造方法,toString方法)
1 package test; 2 3 public class Emp implements Comparable { 4 5 private String name; 6 private int age; 7 public String getName() { 8 return name; 9 } 10 public void setName(String name) { 11 this.name = name; 12 } 13 public int getAge() { 14 return age; 15 } 16 public void setAge(int age) { 17 this.age = age; 18 } 19 public Emp() { 20 super(); 21 } 22 public Emp(String name, int age) { 23 super(); 24 this.name = name; 25 this.age = age; 26 } 27 @Override 28 public String toString() { 29 return "Emp [name=" + name + ", age=" + age + "]"; 30 } 31 @Override 32 public int compareTo(Object o) { 33 if(o instanceof Emp){//判斷是否可以轉換,不能則拋出異常 34 Emp emp = (Emp) o; 35 // return this.age-emp.getAge();//按照年齡升序排序 36 return this.name.compareTo(emp.getName());//換姓名升序排序 37 } 38 throw new ClassCastException("不能轉換為Emp類型的對象..."); 39 } 40 41 }
顯然這種方法限制較多,一般用第二種匿名內部類
1 Collections.sort(ans,new Comparator(){ 2 @Override 3 public int compare(Object a1, Object b1){ 4 if(a1 instanceof ArrayList && b1 instanceof ArrayList) { 5 ArrayList<TreeNode> a = (ArrayList<TreeNode>) a1; 6 ArrayList<TreeNode> b = (ArrayList<TreeNode>) b1; 7 8 if (a.size() > b.size()) return -1; 9 else if (a.size() == b.size()) return 0; 10 else return 1; 11 } 12 throw new ClassCastException("不能轉換為ArrayList類型"); 13 } 14 });
