0、基本集合排序的方法:
java.util.Arrays.sort(o);//Arrays是类;
java.util.Collections.sort(o);//Collections是类;
对Java类排序,介绍两种常用方法:
1、对所要排序的类,实现了该接口:
java.lang.Comparable<T>
即实现了方法: 比较结果大的返回1,相等返回0,小于返回-1。
public int compareTo(T o);//定义类比较的方法;
对符合以上要求,则可以直接使用:
java.util.Arrays.sort(o);//升序排序,对集合数组有效,不可以对List使用
java.util.Collections.sort(List arg0);
Eg:
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);
}
}
}
2、使用比较器:Comparator<T>(接口){public int compare(T o1,To2){}}
在调用Arrays.sort(T o,Comparator<T> c),Collections.sort(T o,Comparator<T> c)
传递一个比较器;
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处理。