-1

对于自然排序,我使用的是可比较的,我一使用该方法就发现了

  public int compareTo(T o1) {      
        System.err.println("this "+this.empID+" that "+((Employee<T>)o1).empID);
        return this.empID - ((Employee<T>)o1).empID;
    }

它工作正常,但是 this.empID 带有一些逻辑,我无法弄清楚。那么 this.empID 值背后的逻辑是什么,什么是迭代,就像调用排序方法一样,内部算法正在处理这部分(排序算法)

例如 :

在尝试打印 this.empID 并且输出是

this 1 that 5
this 6 that 1
this 6 that 5
this 3 that 5
this 3 that 1
this 7 that 5
this 7 that 6
this 4 that 5
this 4 that 3
this 8 that 5
this 8 that 7
this 2 that 5
this 2 that 3
this 2 that 1

this的值来自哪里,或者迭代逻辑是什么,是不是因为Sorting算法。

4

1 回答 1

2

如果您的问题是关于什么代码正在调用您的compareTo方法,那么您是对的,它通常会被称为排序算法的一部分。例如,如果您将 an 插入Employee a到包含(例如)的 TreeSet 中,您可能会看到类似or的Employee b调用,具体取决于确切的排序算法。在第一种情况下,是,在第二种情况下,是和是。a.compareTo(b)b.compareTo(a)thisathisbthata

要查看正在调用的代码compareTo(),您可以在该方法中设置断点并使用调试器。或者,查看调用堆栈跟踪的一种快速而粗略的技术是将以下内容添加到compareTo()

Exception e = new Exception(); // This prepares a call stack
e.printStackTrace(); // This prints it

显然,这种调试输出在性能方面非常昂贵,而且冗长,因此不应将其留在生产代码中。

于 2012-05-22T11:23:36.840 回答