还是 关于comparetor 的问题, 为什么返回1 就是正序,返回-1就是逆序呢?

ArrayList list = new ArrayList();

    list.add(100);
    list.add(22);
    list.add(77);
    list.add(44);
    list.add(55);

    System.out.println(list);

    Collections.sort(list, new Comparator<Integer>() {
        @Override
        public int compare(Integer num1, Integer num2) {
            return  num1>num2?1:-1;
        }
    });

    System.out.println(list);

}

我们假设 num1 = 100 , num2 = 22. 那么 num1>num2 返回的是1 . 然后呢? 不太明白 。 能帮忙细讲解 一下么。。一步一步的,,

6个回答

这个没有什么好解释的,这个相当于一个规定,大于0的就是指compare方法第一个参数要放在第二个参数的前面,小于0就是指第一个参数要放在第二个参数后面

qq_35954776
qq_35954776 比起别人的各种装逼的评论,这个才是能解决问题得好吧!对于不懂的人这个才是标准,才能解决问题,其他的都是装逼!
大约 4 年之前 回复
starfd
娃都会打酱油了 compare并不关心你返回1是否真的代表正序,num1<num2?1:-1;这样子你就是倒序排
接近 6 年之前 回复

无论正序,还是逆序,你首先要排序吧。排序的过程在哪里?是 Collections.sort 实现的吗?
compare 现在只是实现,要看调用处如何调用,参数是如何传入的才能进一步分析。

Collections.sort 本身实现了排序功能,compare是用来比较大小的,就是你排序时的顺序

 public int compare(Integer num1, Integer num2) {
            return  num1>num2?1:-1;
        }

第一个参数大于第二个参数时返回1
否则(第一个参数小于或等于第二个参数时返回-1

jianwen0529
幻夢之葉 如果你不懂( ? : )运算符可以看书或者网上资料了解!
接近 6 年之前 回复

非要追问为什么的话,其实是历史原因,曾经有几个C函数,他们就是这样区分大小的:
int strcmp(const char *s1, const char *s2);
int memcmp(const void *s1, const void *s2, size_t n);

xusiwei1236
IoT许老师 return an integer less than, equal to, or greater than zero if s1 (or the first n bytes thereof) is found, respectively, to be less than, to match, or be greater than s2.
接近 6 年之前 回复

Comparator的是根据二叉树进行排序,并且是根据中序进行遍历的。
num1>num2?1:-1; 这个是三元运算符(具体可以了解下Java基础),如果num1 > num2 则返回1,那么num1是右节点,num2是左节点,中序遍历后,那么compartor就是是按照num从小到大的顺序排列;
反之,num1>num2?-1:1则是如何num1 > num2 则返回-1,num1是左节点,num2是右节点,中序遍历后,那么compartor就是是按照num从大到小的顺序排列;

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐