我正在尝试构建优先级队列,但在测试时似乎存在一些不一致。我覆盖了方法compareTo()
,但不知怎的,它让年龄最小的学生回归。这是为什么 ?不应该是22岁(最高)的学生吗?这是代码:
public class Student implements Comparable<Student> {
private String name;
private int age;
public Student(int i) {
age = i;
}
public int getAge(){
return this.age;
}
public int print(){
return age;
}
@Override
public int compareTo(Student s) {
if(this.age < s.getAge()){return -1;}
else if(this.age > s.getAge()){return 1;}
else{return 0;}
}
public static void main(String[] args) {
Queue<Student> q = new PriorityQueue<Student>();
q.offer(new Student(21));
q.offer(new Student(18));
q.offer(new Student(22));
Student s = q.poll();
System.out.println(s.print());
}
答案 0 :(得分:2)
Java的java.util.PriorityQueue
被定义为返回最少的元素,而不是最大的元素,你可以通过查看文档找到它。
这个队列的头部是关于的队列中最少的元素 指定的排序。如果多个元素绑定最小值,则 头是这些元素之一 - 关系是任意打破的。该 队列检索操作poll,remove,peek和element访问 队列头部的元素。
优先级队列是基于最小值还是最大值取决于语言和库,但最小队列是最常见的,就像我看到的那样。