使用Comparable/Comparator实现集合的自定义排序。

7 篇文章 0 订阅
5 篇文章 0 订阅

自定义List类型,Pair里面有两个int元素:first,Second。List简写为A={[1,2],[1,1],[8,5],[6,3]}。

如何对A中所有数据第一个数字进行排序,如果第一个数字相同用第二个数字排序?排序结果为A={[1,1],[1,2],[6,3],[8,5]}

使用Comparable接口,在需对比的实体类上实现该接口的 conparaTo方法

class Pair implements Comparable<Pair> {

    private int first;
    private int second;

    public Pair(int first, int second) {
        this.first = first;
        this.second = second;
    }

    @Override
    public int compareTo(Pair p) {
        if (first == p.first) {
            if (second == p.second) return 0;
            return second < p.second ? -1 : 1;
        }
        return first < p.first ? -1 : 1;
    }

    public int getSum() {
        return first + second;
    }

    public String toString() {
        return "[first:" + first + ", second:" + second + ", sum:" + getSum() + "]";
    }

   
}

使用Collections.sort(list);激活排序

    public static void main(String[] args) {
        ArrayList<Pair> list = new ArrayList<>();
        list.add(new Pair(8, 1));
        list.add(new Pair(6, 5));
        list.add(new Pair(6, 3));
        list.add(new Pair(5, 7));
        list.add(new Pair(4, 9));

        // 用Comparable排序 -- 先按第一个数排序  再按第二个数排序
        Collections.sort(list);
        for (Pair p: list){
            System.out.println(p);
    }
    }

为了保证的封装类型,使用外部Coparator进行排序

在外部时使用匿名内部类Comparator进行排序构造

 Collections.sort(list2, new Comparator<Pair2>() {
            @Override
            public int compare(Pair2 o2, Pair2 o1) {
                if (o2.getFirst()-o1.getSecond() ==0){
                    return o2.getSecond()-o1.getSecond();
                }
                 return o2.getFirst()-o1.getFirst();
            }
        });

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值