java的Comparator比较器及arrays.sort

一、Arrays.sort
Arrarys.sort()是用于给数组排序的,默认的情况下,是顺序排序,即从小到大:

public class Test5 {
 
    public static void main(String[] args) {
        int[] arr = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        Arrays.sort(arr);
        for(int x:arr){
            System.out.print(x); //print: 0123456789
        }
    }
}


二、Arrays.sort逆序排序


2.1  用Comparator进行逆序排序
在开始之前要注意一点:下图我们看一下Comparator的定义,是用了泛型的。泛型本质是引用,是不能传入基本数据类型(如int、long等)的,即T不能为 int 等,即Comparator<int>会报错,要用Integer 代替 int。

而Comparator接口中,包含了一个最核心的方法:int compare() ,这个方法是用于定义排序规则的,如下:

可以看到:

compare的参数o1、o2 也是泛型T,即排序的元素也不能是基本数据类型。

所以若我们需要从小到大排序时,则代码应该这样写:

public class Test5 {
 
    public static void main(String[] args) {
        Integer[] arr = {9, 8, 7, 2, 3, 4, 1, 0, 6, 5};
        Arrays.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1-o2;
            }
        });
 
        for(int x:arr){
            System.out.print(x); //print: 0123456789
        }
    }
}


由于 compare()比较抽象,所以为了方便,我们可以这样把他记住:

int compare(T o1, T o2) 是比较o1和o2的大小

从文档可以得知:如果compare返回值为负数意味着o1比o2小,否则返回为零意味着o1等于o2,返回为正数意味着o1大于o2

所以,当我们需要逆序(大到小排列)的时候,只需要 return o2-o1,即表示 数值越大的数,compare会认为它越小,数值越小的数,compare反而会认为它越大

 
 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值