collectionでsort()メソッドlistコレクションのソート

4852 ワード

1つ目はlistのオブジェクト実装Comparableインタフェースです.以下のようにします.
/** 
*  order User  
*/ 
public class User implements Comparable<User>{ 
    private String name; 
    private Integer order; 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public Integer getOrder() { 
        return order; 
    } 
    public void setOrder(Integer order) { 
        this.order = order; 
    } 
    public int compareTo(User arg0) { 
        return this.getOrder().compareTo(arg0.getOrder()); 
    } 
} 

 
テスト:
public class Test{

    public static void main(String[] args) { 
        User user1 = new User(); 
        user1.setName("a"); 
        user1.setOrder(1); 
        User user2 = new User(); 
        user2.setName("b"); 
        user2.setOrder(2); 
        List<User> list = new ArrayList<User>(); 
        // add user2 add user1 
        list.add(user2); 
        list.add(user1); 
        Collections.sort(list); 
        for(User u : list){ 
            System.out.println(u.getName()); 
        } 
    } 
} 


 
出力結果は以下のa b
2つ目の方法はCollectionsによる.sortリロード方法は、例えば、
/** 
*  order User  
*/ 
public class User { // Comparable  
    private String name; 
    private Integer order; 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public Integer getOrder() { 
        return order; 
    } 
    public void setOrder(Integer order) { 
        this.order = order; 
    } 
} 

 
プライマリクラスには、次のように書けばいいです.
public class Test{ 
    public static void main(String[] args) { 
        User user1 = new User(); 
        user1.setName("a"); 
        user1.setOrder(1); 
        User user2 = new User(); 
        user2.setName("b"); 
        user2.setOrder(2); 
        List<User> list = new ArrayList<User>(); 
        list.add(user2); 
        list.add(user1); 
        
        Collections.sort(list,new Comparator<User>(){ 
            public int compare(User arg0, User arg1) { 
                return arg0.getOrder().compareTo(arg1.getOrder()); 
            } 
        }); 
        for(User u : list){ 
            System.out.println(u.getName()); 
        } 
    } 
} 

 
出力結果は、a bの前者のコード構造は簡単であるが、固定された属性に基づいてソートするしかなく、後者は柔軟で、一時的にソート項目を指定することができるが、コードは簡潔ではない.
複数フィールドの場合:Collections.sort(list,new Comparator(){public int compare(User arg 0,User arg 1){//初めて専門int i=arg 0.getOrder()/compareTo(arg 1.getOrder();
//同じ専攻の場合は2回目の比較if(i=0){//2回目の比較int j=arg 0.getXXX().compareTo(arg 1.getXXX()//同じ学制の場合は年齢順if(j=0)に戻る{                     return arg0.getCCC().compareTo(arg1.getCCC());                 }                 return j;             }             return i;             }         });
以下は別の例package testである.
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator;
public class ArrayListTest { public static void main(String[] args) { ArrayList arrayList  = new ArrayList() ; arrayList.add(new Exmployee("zengqiang",new Integer(5000))) ; arrayList.add(new Exmployee("zengmin",new Integer(4000))) ; arrayList.add(new Exmployee("liuxiaojuan",new Integer(4200))) ; arrayList.add(new Exmployee("giuming",new Integer(2200))) ; Collections.sort(arrayList,new Comparator(){public int comparare(Exmployee arg 0,Exmployee arg 1){returnarg 1.getSalary()−arg 0.getSalary();//////////////////////////////////////////returnarg 0.getSalary()−arg 1.getSalary();工資降順///returnarg 0.getName()/.compareTo(arg 1.getName();名前昇順}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}); for(Exmployee e:arrayList) System.out.println(e.getName()+"'s salary is "+e.getSalary()) ; }
}
class Exmployee { public Exmployee(String name, int salary) { this.name = name ; this.salary = salary ; }
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public int getSalary() { return salary; }
public void setSalary(int salary) { this.salary = salary; }
private int salary; }