欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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());
    }
处理结果

Comparator一知半解?那不妨来一起探个究竟

加以变更
   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;
            }
        });
结果

Comparator一知半解?那不妨来一起探个究竟

神奇!!!!简单

简单总结下 compare(Integer o1, Integer o2),如果第一个入参大于第二个入参,我返回1,此时是升序排列;反之,则是降序排列,。。。。。。。我突然不想了解了

Comparator一知半解?那不妨来一起探个究竟

别走,我重说

compare(Integer o1, Integer o2)

当我们需要将o1移动到o2后面时,我们返回1,如果我们需要将o2移动到o1前面时,只需要返回-1,如果不需要变跟,则返回0;

Comparator一知半解?那不妨来一起探个究竟

这样是不是简单多了,我当年如果早点想明白,也就不会在这儿废话了;写这个代码的大神真的高估了我的智商;

未完,待续

本文地址:https://blog.csdn.net/cb_code/article/details/111934719