我了解我们可以根据需求对存储在Collection中的对象进行排序或排序。

虽然我有深刻的了解,但我并不相信这样的事实,即排列方式的升序和降序是通过(a-b)->升序或(b-a)->降序来实现的,其中“a”和“b”是类我们选择比较的成员。

例:

public int compareTo(Student s) {
     return this.grade - s.grade; //ascending order
    // return s.grade - this.grade; // descending order
}

订购对象元素背后的逻辑是什么?如果正数1如何将“(this.grade-s.grade)”移到“this.grade”的前面,然后将“s.grade”放在下一个顺序,为什么不反过来呢?谁验证比较结果(+ 1,-1、0)然后分别以升序或降序排列,是否有任何文档描述该部分的内部工作?
public class Student implements Comparable <Student>{
    String name;
    int grade;
    public Student(String name, int grade) {
        this.name = name;
        this.grade = grade;
    }
    public int compareTo(Student s) {
         return this.grade - s.grade; //ascending order
        // return s.grade - this.grade; // descending order
    }
    public String toString() {
        return this.name + ", " + this.grade;
    }
}

请分享,非常感谢!

编辑:

我得到了Java文档,我的问题是这样的:
sort these grades (13, 2)

Case ascending -> return this.grade - s.grade;

picture in my mind:
compare (13, 2) , (13 - 2) > 0 so move 2 to front.
result -> 2, 13
------
Case descending -> return s.grade - this.grade;

picture in my mind:
compare (2, 13) , (2 - 13) < 0 so move 13 to front.

result -> 13, 2

“这是怎么发生的?”是我最初的问题。我读了文档,仍然不知道。

最佳答案



在许多计算机语言中,使用负数表示“小于此数量”,使用正数表示“大于此数量”和0表示“这两个条件相等”已经使用了30多年。



有几个内部类使用返回值对数组或集合中的元素进行重新排序,包括
Collections.sort() Arrays.sort() TreeSet
编辑

为了回答如何工作,您将必须查看上面列出的每个类的源代码。为了使排序尽可能高效,它们中的一些非常复杂。但总的来说,一切都归结为这样的代码:

if( data[i].compareTo(data[j]) > 0 ){
   // swap data[i] and  data[j]
}

09-28 12:20