Java自定義排序


參考:https://www.cnblogs.com/huangjinyong/p/9037588.html

 

java集合的工具類Collections中提供了兩種排序的方法,分別是:

  1. Collections.sort(List list)
  2. 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         });

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM