java 中Array.sort的使用样例

文章介绍了如何在Java中对一维和二维数组进行排序。对于一维数组,使用Arrays.sort()默认进行升序排序,通过Collections.reverseOrder()或自定义Comparator实现降序。而对于二维数组,文章展示了如何按照指定列进行排序,包括仅根据第二列排序以及更灵活的两段排序方式,同时提到了使用lambda表达式可能影响性能的情况。
摘要由CSDN通过智能技术生成

一维数组

默认升序

int[] people = new int[]{4, 6, 8, 0, 5, 9, 7, 2, 1, 3};
Arrays.sort(people);  //默认升序

//输出结果
for (int i = 0; i < people.length; i++) {
            System.out.print(people[i] + " ");
        }

在这里插入图片描述

降序:两种方法,注意这里都要把int类型装箱成Integer才能排序

int[] _people = new int[]{4, 6, 8, 0, 5, 9, 7, 2, 1, 3};
//注意这里只能把int类型装箱成Integer才能排序
Integer[] people = Arrays.stream(_people).boxed().toArray(Integer[]::new);

//方法一:使用Collections.reverseOrder()
Arrays.sort(people, Collections.reverseOrder());
//方法二:重写Comparator
Arrays.sort(people, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });

//输出结果
for (int i = 0; i < people.length; i++) {
            System.out.print(people[i] + " ");
        }

在这里插入图片描述

二维数组

已知:

int[][] people = {{7,0},{4,4},{6,1},{5,0},{7,1},{5,2}};

写法一:表示仅根据第二列排序(默认升序),相同时按原顺序,这种写法无法实现降序

Arrays.sort(people, Comparator.comparingInt(o -> o[1])); //按第二列升序
Arrays.sort(people, Comparator.comparingInt(o -> -o[1])); //按第二列降序

在这里插入图片描述
另外,使用 lambda 表示式创建 Comparator 会导致算法运行时间过长,也可以如下

Arrays.sort(people, new Comparator<int[]>() {
    @Override
    public int compare(int[] o1, int[] o2) {
        return o1[1] - o2[1];
    }
});

写法二:这种写法可以控制两段排序,更加灵活些,如下面的代码,实现先第二列升序,相同时按第一列降序

Arrays.sort(people, (a,b) -> (a[1]==b[1] ? b[0] - a[0] : a[1] - b[1]));

在这里插入图片描述
同样,不用lamda表达式,表示为

Arrays.sort(people, new Comparator<int[]>() {
    @Override
    public int compare(int[] a, int[] b) {
         if(a[1]==b[1]){
             return b[0] - a[0];
         }else {
             return a[1] - b[1];
         }
    }
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

打孔猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值