Java类排序_浅析

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

转载于:https://my.oschina.net/u/1384818/blog/379585

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值