java 排序方式&&解读返回值

个人已知的排序各种写法

 Arrays.sort(arr, new Comparator<Integer>() {
            public int compare(Integer a, Integer b) {
              	//返回值>0交换
                return b-a;
            }
        });
 Collections.sort(arr, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o1 - o2;
            }
        });

/** compareTo() 
 如果指定的数与参数相等返回 0。
 如果指定的数小于参数返回 -1。
 如果指定的数大于参数返回 1。
**/ 
Collections.sort(companyList, new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                    if(o1.compareTo(o2) < 0 ){
                        return -1;
                    }else if(o1.compareTo(o2) == 0){
                        return 0;
                    }else{
                        return 1;
                    }
                }
            });
语法糖,升序排序
items.stream().sorted(Comparator.comparingInt(o-> {
                return o.getA-o.getB;
            })).collect(Collectors.toList());
语法糖,升序排序再倒序
items.stream().sorted(Comparator.comparingInt(o-> {
                return o.getA-o.getB;
            }.reversed()).collect(Collectors.toList());
默认是升序 1,2,3,4  可以使用Comparator.reverseOrder() 降序 4,3,2,1
weightItems.stream().sorted(Comparator.comparing(item -> Double.parseDouble(item.get(weightKey).toString()),Comparator.reverseOrder()))

就当前已知的排序函数里面,其实主要都是重写Comparator类进行排序,咱们这次就不进行撸底层代码去验证怎么去排序的
这次探讨的主要是
1.return 是干嘛的?
2.return 什么能进行排序,降序
3.return 0 -1 1 >1 <-1的 区别

1.重写Comparator 时会有一个return,通过return的数值,去决定是否排序,往简单说一下就是要不要进行交换,即:t1 - t2 ,前面的值t1要不要和对比的值t2进行换 。
想一下冒泡排序的思想,是不是一个值进行对比然后交换,有个交换的概念后,可以去学一下快速排序,其实Comparator 就是使用了快速排序的算法。

想要快速了解
https://www.bilibili.com/video/BV1UP4y1A79a?p=46&vd_source=9e647e8fbd1bda5bba2f92d82c6b349e
存在2个数据 t1,t2,请对这两个数据进行排序并得出结果
一、
t1=t2=1
return 0     不进行交换,两数相等t1,t2
   结果1 1   
二、
t1=1 t2=8    (t1-t2 <  1return < -1   不进行交换 t1,t2
   结果1 8   升序

t1=1 t2=8    (t2-t1 >  1return >  1  进行交换,t2,t1
    结果8 1   降序  

三、
t1=8 t2=1    (t1-t2 > 1return >  1  进行交换,t2,t1
    结果1 8   升序  
   

t1=8 t2=1    (t2-t1 < 1return < -1  不进行交换,t1,t2
   结果8 1   降序

综上tips:t1-t2 是升序 ,t2-t1 是降序

底层原理是:一个数减去另一个数如果大于1则进行交换位置,如果小于-1则不变化。

  1. 返回值大于1效果等同于1
    返回值小于1 效果等同于0,-1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

IT_Octopus

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

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

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

打赏作者

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

抵扣说明:

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

余额充值