compareTo() 如何比较每次迭代中的值?

sai*_*war 0 java comparable

我知道 compareTo() 是如何工作的(即 0,+1,-1)。下面的代码有效但我想知道它是如何比较对象的,它比较三个对象的顺序。

注意:搜索了以前的问题,但没有找到任何答案。

插入列表的值是[a,c,b,d]

任何人都可以请解释一下它采用上述输入进行比较的顺序。

当我调试时,我看到下面的行值组合 this.name.compareTo(employeeName.name);

这个.name 员工姓名.name
C 一种
C
b(值再次重复) c(值再次重复)
一种
d
d C
package packageOne;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class W {
    public static void main(String[] args) {
        
        Employee employee1 = new Employee("a");
        Employee employee2 = new Employee("c");
        Employee employee3 = new Employee("b");
        Employee employee4 = new Employee("d");
        
        
        List<Employee> al = new ArrayList<>();
        al.add(employee1);
        al.add(employee2);
        al.add(employee3);
        al.add(employee4);
        
        Collections.sort(al);
        
        System.out.println("after sorting");
        
        System.out.println(al);

        
    }

}
Run Code Online (Sandbox Code Playgroud)

雇员.java

package packageOne;

public class Employee implements Comparable<Employee> {

    public String name;

    Employee(String nameEmp) {
        name = nameEmp;

    }

    @Override
    public String toString() {

        return name;
    }

    @Override
    public int compareTo(Employee employeeName) {

        return this.name.compareTo(employeeName.name);

    }
}

Run Code Online (Sandbox Code Playgroud)

Jer*_*eke 6

比较的顺序取决于所使用的排序算法,这取决于您使用的 Java 版本。例如,在 Java 11 中,排序算法默认为TimSort,这是一种从更知名的归并排序和插入排序算法派生的排序算法。

  • [Java 6](https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#sort(java.util.List)) 说合并排序,[Java 7](https: //docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List)) 说 timsort。在后来的版本中,他们删除了所有关于实现的提及。理所应当;这应该不重要。 (2认同)