Java的列表排序问题

来源:互联网 发布:麦多商城系统 源码 编辑:程序博客网 时间:2024/05/21 22:43

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()是自定义的排序方式(这里显然是倒序,为详细写出代码...)

0 0