Java的列表排序问题

Java中的列表排序问题非常的常见,我们经常使用的是自然顺序排序,此时Java本身提供了很好的接口Comparable和Camparator  

二者的区别是Comparable接口是自然排序,Camparator接口是为了用于对排列的顺序精准的控制。

Arrays和Collections都重写了sort函数,此时的sort函数一般分为两种,一种是参数为一个数组,另一种参数是一个数组和一个Camparator对象。


举例说明使用Comparable进行排序

import java.util.Arrays;

public class sortdemo {
	public static void main(String [] args){
		sortObjects();
	}
	
	public static void sortObjects(){
		final String[] numbers = {"2","1","3","4","5"};	
		Arrays.sort(numbers);
		System.out.print(Arrays.toString(numbers));		
	}	
}


上边的代码主要是直接使用重写好的sort函数进行排序,这个是Arrays自带的,用于自然顺序排序非常简单


但是,如果是一些自定义的类没有实现Comparable接口,那么直接进行sort就是不行的,下边举例:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class NotCamparable {
	private int i;
	private NotCamparable(final int i){
		this.i = i;
	}
	
	public static void main(String[] args){
		sortNotCamparable();
	}


	public static void sortNotCamparable(){
		final List<NotCamparable> objects = new ArrayList<>();
		for(int i = 0; i < 10; i++){
			objects.add(new NotCamparable(i));
		}
		try{
			Arrays.sort(objects.toArray());
		}catch(Exception e){
			System.out.println(e);
		}
	}

}



此时会输出异常 

java.lang.ClassCastException: NotCamparable cannot be cast to java.lang.Comparable



如果想实现自定义的排序方法,可以实现sort所需要的Camparator 接口

然后Collections.sort(numbers, new ReverNumberOrder());

这里numbers是需要排序的数组, 后边的ReverseNumberOrder()是自定义的排序方式(这里显然是倒序,为详细写出代码...)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值