0、基本集合排序的方法:java
java.util.Arrays.sort(o);//Arrays是類; java.util.Collections.sort(o);//Collections是類;
對Java類排序,介紹兩種經常使用方法:數組
一、對所要排序的類,實現了該接口:ide
java.lang.Comparable<T>
即實現了方法: 比較結果大的返回1,相等返回0,小於返回-1。this
public int compareTo(T o);//定義類比較的方法;
對符合以上要求,則能夠直接使用:spa
java.util.Arrays.sort(o);//升序排序,對集合數組有效,不能夠對List使用 java.util.Collections.sort(List arg0);
Eg:
.net
public class Ar implements Comparable<Ar>{ //定義所要建立的集合類,實現對應接口; int a; int b; String name; Ar(){} Ar(int a,int b,String name){ this.a=a; this.b=b; this.name=name; } public int compareTo(Ar o) { return this.name.compareTo(o.name); } } public class Join{ public static void main(String[] args) { /*Ar[] ars =new Ar[2]; ars[0]=new Ar(1,3); ars[1]=new Ar(3,1); Arrays.sort(ars); for(Ar i : ars) { System.out.println("a="+i.a+",b="+i.b); }*/ List br_list=new ArrayList(); br_list.add(new Ar(2,5,"z")); br_list.add(new Ar(2,2,"b")); Collections.sort(br_list); for(int i=0 ;i<br_list.size();i++) { System.out.println("a="+((Ar)br_list.get(i)).a+",b="+((Ar)br_list.get(i)).b+ ",name="+((Ar)br_list.get(i)).name); } } }
二、使用比較器:Comparator<T>(接口){public int compare(T o1,To2){}}code
在調用Arrays.sort(T o,Comparator<T> c),Collections.sort(T o,Comparator<T> c)blog
傳遞一個比較器;排序
Collections.sort(list, new Comparator<Br>(){ @Override public int compare(Br o1, Br o2) { return o1.c>o2.c?1:-1; //return o1.d>o2.d?1:-1; } }); public class Br { int c; int d; public Br(){} public Br(int c,int d){ this.c=c; this.d=d; } }
擴展:接口
源碼java.util.Collections類文件sort(List<T> list, Comparator<? super T> c)的代碼
public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set(a[j]); } }
實際上Collections.sort(List<T> list, Comparator<? super T> c)的實現也是將list轉化成數組用Arrays.sort處理。