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. 
     }      
}    

在我的主课中,我正在使用 PriorityQueue

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

那么在执行添加和轮询操作以保持正确的排序顺序时,究竟是如何调用比较器的呢?谢谢。

4

1 回答 1

4

compare方法并没有真正对事物进行排序。好吧,从技术上讲,它是对两个对象进行排序的退化情况,但在计算机科学中为避免混淆,我们通常只称其为比较,而不是排序。

由于这是您的类,因此您有责任compare使用您认为合适的任何比较逻辑来实现该方法。但是,这个比较逻辑,为了合理,必须遵循Comparator接口中该方法的 Javadoc 中的约束。

您正在使用的集合类(在本例中为)将在尽可能多的对象对上PriorityQueue调用该方法,以将对象插入到集合中的正确位置。compare但是,不要对要比较的对象做任何假设;您的compare方法应该适用于任何一对对象 - 甚至是由对象和自身组成的一对。

于 2013-10-27T10:40:18.417 回答