List泛型排序,很多地方要用到排序,有算法的排序,也有已经组装好的类调用。对数组的,对集合的排序相信大家都不陌生。记录下刚刚花了差不多一个小时才做出来的一个对List<T>的排序,大部分时间都是用在看API上面了,代码不多。下面是代码:

List<Object[]> list=new ArrayList<Object[]>();
        Object[] obj1 = new Object[2];
        Object[] obj2 = new Object[2];
        Object[] obj3 = new Object[2];
        obj1[0]=105;
        obj1[1]="A";
        obj2[0]=88;
        obj2[1]="B";
        obj3[0]=199;
        obj3[1]="C";
        list.add(obj1);
        list.add(obj2);
        list.add(obj3);
        System.out.println("排序前:");
        for(int i=0;i<list.size();i++) {
            System.out.println(list.get(i)[1]+"的值是:"+list.get(i)[0]);
        }
                         
        ComparableObjects c=new ComparableObjects();
        Collections.sort(list,c);
        System.out.println("排序后:");
        for(int j=0;j<list.size();j++) {
            System.out.println(list.get(j)[1]+"的值是:"+list.get(j)[0]);
        }


这个是对List<Object[]>的一个排序,泛型大家都是可以随便修改的,由于我的项目中使用到的是一个对象数组,所以就用这个做为例子,最主要的是Collections.sort(list,c);这行。Collections提供一个sort方法,建议大家去看下api,这个有好几个方法使用的,这里只是一种。

相信大家也看到当中有一个ComparableObjects这个类,下面也来看下这个类里面有什么东西吧


import java.util.Comparator;
public class ComparableObjects implements Comparator<Object[]> {
    /**
     * 数组里某字段排序
     */
    public int compare(Object[] o1, Object[] o2) {
        // TODO Auto-generated method stub
        Integer a=(Integer) o1[0];
        Integer b=(Integer) o2[0];
        int flag = a.compareTo(b);
        return flag;
    }
}

上面是实现JAVA自带的一个接口Comparator,

比较函数强行对某些对象 collection 进行整体排序。可以将 Comparator 传递给 sort 方法(如 Collections.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如 TreeSetTreeMap)的顺序。

上面那句是在api上面抄下来的。对这个类有疑问的也可以去看下jdk的api。我也是一知半解而已。

注意:在ComparableObjects类里面compare方法下面的a,b要是对象型数据才行也就是说如果是int的话是不可以的。

看下结果图:


163528332.jpg