比较器内部使用哪种排序来比较值,以及如何调用其比较方法



我只想知道比较器使用哪种排序技术对事物进行排序。以及如何调用它的compare()方法,即使我们从未显式调用此方法。例如,假设我有课

class Person{
    int age;
    int personId;
    //..getters and setters goes here
}

我还有另一个类 分类人

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

在我的主类中,我正在使用优先级队列

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

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

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

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

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

最新更新