-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 値の背後にあるロジックと iteration とは何ですか? sort メソッドを呼び出すと、内部的にアルゴがその部分を処理しています (ソートアルゴリズム)

例えば ​​:

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の値がどこから来ているか、または反復ロジックとは何か、それは並べ替えアルゴリズムによるものです。

4

1 に答える 1

2

どのコードがメソッドを呼び出しているかについての質問であれば、compareToそれは通常、並べ替えアルゴリズムの一部として呼び出されることは間違いありません。たとえば、 (たとえば)Employee aを含む TreeSet にを挿入すると、正確な並べ替えアルゴリズムに応じて、またはのEmployee bような呼び出しが表示される場合があります。最初のケースでは is 、2 番目のケースでは isおよびisです。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 に答える