我只想知道比较器使用哪种排序技术对事物进行排序。以及如何调用它的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
方法应该适用于任何一对对象 - 即使是由对象和自身组成的一对对象。