Comparator在内部使用哪种方式来比较值以及它如何调用其比较方法?

时间:2013-10-27 10:33:14

标签: java comparator

我只想知道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
   }
 }

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

1 个答案:

答案 0 :(得分:4)

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

由于这是您的课程,因此您有责任使用您认为合适的比较逻辑来实施compare方法。但是,为了明智,这种比较逻辑必须遵循Comparator接口中该方法的Javadoc约束。

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