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

2022-07-25

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

《Comparator一知半解?那不妨来一起探个究竟.doc》

下载本文的Word格式文档,以方便收藏与打印。