3

Comparator が物事をソートするためにどのソート手法を使用しているかを知りたいだけです。そして、compare()このメソッドを明示的に呼び出さない場合でも、そのメソッドがどのように呼び出されるか。たとえば、クラスがあるとしましょう

class Person{
    int age;
    int personId;

    //..getters and setters goes here
}

そして、私は別のクラスSortPersonを持っています

class SortPerson implements Comparator<Person>{
     public int compare(){
        //sorting logic goes here 
        //Assume that I am sorting according to person age. 
     }      
}    

私の Main クラスでは、PriorityQueue を使用しています

class Main{
   public void main(...){
     Queue<Person> q = new PriorityQueue<Person>(5, new SortPerson());
     //q.add() and q.poll() operations goes here
   }
 }

では、適切な並べ替え順序を維持するために、追加操作とポーリング操作の実行中に Comparator がどのように呼び出されるのでしょうか? ありがとう。

4

1 に答える 1

4

メソッドは実際にはcompareソートしません。技術的には、2 つのオブジェクトを並べ替えるという退化したケースを処理しますが、コンピューター サイエンスでは、混乱を避けるために、通常、並べ替えではなく単に比較と呼びます。

これはあなたのクラスであるため、compare適切と思われる比較ロジックを使用してメソッドを実装するのはあなたの責任です。ただし、この比較ロジックが適切であるためには、インターフェース内のそのメソッドに対する Javadoc の制約に従う必要がありComparatorます。

使用しているコレクション クラス (この場合は) は、コレクション内の正しい場所にオブジェクトを挿入するために必要な数のオブジェクトのペアに対してメソッドPriorityQueueを呼び出します。compareただし、どのオブジェクトが比較されるかについて、仮定を立てないでください。メソッドは、オブジェクトの任意のペア (オブジェクトとそれ自体で構成されるペアであっても) に対してcompare正しく機能する必要があります。

于 2013-10-27T10:40:18.417 に答える