还是 关于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 . 然后呢? 不太明白 。 能帮忙细讲解 一下么。。一步一步的,,

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

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

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

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

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

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

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