我只想知道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? 谢谢。
答案 0 :(得分:4)
compare
方法并没有真正排序。好吧,从技术上来说,它确实是对两个对象进行排序的退化情况,但在计算机科学中为了避免混淆,我们通常只是将其称为比较,而不是排序。
由于这是您的课程,因此您有责任使用您认为合适的比较逻辑来实施compare
方法。但是,为了明智,这种比较逻辑必须遵循Comparator
接口中该方法的Javadoc约束。
您正在使用的集合类(在本例中为PriorityQueue
)将在尽可能多的对象上调用compare
方法,以便将对象插入集合中的正确位置。但是,不要对哪些对象进行比较做出任何假设;您的compare
方法应该能够正确处理任何对象 - 即使是由对象及其自身组成的对。