Comparator一知半解?那不妨来一起探个究竟
程序员文章站
2022-03-19 15:55:58
Comparator一知半解?那不妨来一起探个究竟在java中,通常会对集合中的内容进行排序,这种排序可以理解为就是8大排序算法的用武之地,但奈何需求进度压迫,完成任务优先,先CV下,后续再优化;大部分人都是这么想的,当然java社区的大神也想到了,还给出了解决方案;既 java.util.List#sort 该方法定义了一个排序,需要传入一个比较器java.util.Comparator,这样就可以快速的实现排序;问题来了:返回值是什么意思?我怎么决定增序还是降序?返回的-1,1,0 分别代...
Comparator一知半解?那不妨来一起探个究竟
在java中,通常会对集合中的内容进行排序,这种排序可以理解为就是8大排序算法的用武之地,但奈何需求进度压迫,完成任务优先,先CV下,后续再优化;大部分人都是这么想的,当然java社区的大神也想到了,还给出了解决方案;
既 java.util.List#sort
该方法定义了一个排序,需要传入一个比较器java.util.Comparator
,这样就可以快速的实现排序;
问题来了:
- 返回值是什么意思?
- 我怎么决定增序还是降序?
- 返回的-1,1,0 分别代表什么,可不可以替换?
以下内容从使用到原理来进行一番探索;
先看下这段代码
public static void main(String[] args) {
List<Integer> sortList=new ArrayList<>();
sortList.add(1);
sortList.add(9);
sortList.add(2);
sortList.add(4);
sortList.add(6);
sortList.add(8);
sortList.add(5);
sortList.add(3);
sortList.add(7);
System.out.println("排序前:"+sortList.toString());
sortList.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if(o1>o2){
return 1;
}
if(o1<o2){
return -1;
}
return 0;
}
});
System.out.println("排序后:"+sortList.toString());
}
处理结果
加以变更
sortList.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
if(o1>o2){
return -1;
}
if(o1<o2){
return 1;
}
return 0;
}
});
结果
神奇!!!!简单
简单总结下 compare(Integer o1, Integer o2),如果第一个入参大于第二个入参,我返回1,此时是升序排列;反之,则是降序排列,。。。。。。。我突然不想了解了
别走,我重说
compare(Integer o1, Integer o2)
当我们需要将o1移动到o2后面时,我们返回1,如果我们需要将o2移动到o1前面时,只需要返回-1,如果不需要变跟,则返回0;
这样是不是简单多了,我当年如果早点想明白,也就不会在这儿废话了;写这个代码的大神真的高估了我的智商;
未完,待续
本文地址:https://blog.csdn.net/cb_code/article/details/111934719