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处理。