个人已知的排序各种写法
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 < 1)
return < -1 不进行交换 t1,t2
结果1 8 升序
t1=1 t2=8 (t2-t1 > 1)
return > 1 进行交换,t2,t1
结果8 1 降序
三、
t1=8 t2=1 (t1-t2 > 1)
return > 1 进行交换,t2,t1
结果1 8 升序
t1=8 t2=1 (t2-t1 < 1)
return < -1 不进行交换,t1,t2
结果8 1 降序
综上tips:t1-t2 是升序 ,t2-t1 是降序
底层原理是:一个数减去另一个数如果大于1则进行交换位置,如果小于-1则不变化。
- 返回值大于1效果等同于1
返回值小于1 效果等同于0,-1