Comparator 排序

        1.Comparator接口:能对不同类型的对象进行排序(当然排序依据还是基本类型),也不用自己实现排序算法

     Interface Comparator<T>
    对任意类型集合对象进行整体排序,排序时将此接口的实现传递给Collections.sort方法或者Arrays.sort方法排序。
实现int compare(T o1, T o2);方法,返回正数,零,负数各代表大于,等于,小于。

        2 代码:            

public class Test {

    private final class CompareName implements Comparator<Milan> {
        boolean is_Ascend;

        public CompareName(boolean b) {
            // TODO Auto-generated constructor stub
            is_Ascend = b;
        }

        @Override
        public int compare(Milan o1, Milan o2) {
            // TODO Auto-generated method stub
            if (is_Ascend)
                return o1.p_Name.compareTo(o2.p_Name);
            else
                return o2.p_Name.compareTo(o1.p_Name);
        }
    }

    private final class CompareId implements Comparator<Milan> {
        boolean is_Ascend;

        public CompareId(boolean b) {
            // TODO Auto-generated constructor stub
            is_Ascend = b;
        }

        @Override
        public int compare(Milan o1, Milan o2) {
            // TODO Auto-generated method stub
            int a, b;
            if (is_Ascend) {
                a = o1.p_Id;
                b = o2.p_Id;
            } else {
                a = o2.p_Id;
                b = o1.p_Id;
            }

            if (a > b)
                return 1;
            else if (a == b)
                return 0;
            else
                return -1;
        }
    }

    public static void main(String[] args) {
        Test t = new Test();

        Milan p1 = new Milan(1, "Dida");
        Milan p2 = new Milan(2, "Cafu");
        Milan p3 = new Milan(3, "Maldini");
        Milan P4 = new Milan(6, "Baresi");
        Milan p5 = new Milan(9, "Inzaghi");
        Milan P6 = new Milan(10, "Costa");

        List<Milan> mList = new ArrayList<Milan>();
        mList.add(p1);
        mList.add(P6);
        mList.add(P4);
        mList.add(p2);
        mList.add(p5);
        mList.add(p3);

        System.out.println("初始顺序");
        System.out.println("姓名  |   号码");
        for (Milan p : mList) {
            System.out.println(p.p_Name + " |   " + p.p_Id);
        }
        System.out.println();
        System.out.println("对号码降序");
        System.out.println("姓名  |   号码");

        Collections.sort(mList, t.new CompareId(false));

        for (Milan p : mList) {
            System.out.println(p.p_Name + " |   " + p.p_Id);
        }
        System.out.println();
        System.out.println("对姓名升序");
        System.out.println("姓名  |   号码");

        Collections.sort(mList, t.new CompareName(true));

        for (Milan p : mList) {
            System.out.println(p.p_Name + " |   " + p.p_Id);
        }
    }

}

 

 运行结果:

初始顺序
姓名 | 号码
Dida | 1
Costa | 10
Baresi | 6
Cafu | 2
Inzaghi | 9
Maldini | 3

对号码降序
姓名 | 号码
Costa | 10
Inzaghi | 9
Baresi | 6
Maldini | 3
Cafu | 2
Dida | 1

对姓名升序
姓名 | 号码
Baresi | 6
Cafu | 2
Costa | 10
Dida | 1
Inzaghi | 9
Maldini | 3

 

comparator函数的机制是自定义下,若01>02则返回1,

 

转载于:https://my.oschina.net/niceyaohang/blog/1600791

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值