0

我试图建立一个优先队列,但是当我测试它时似乎有一些不一致。我覆盖了方法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());
} 
4

1 回答 1

2

Javajava.util.PriorityQueue被定义为返回最小元素,而不是最大元素,正如您可以通过查看文档找到的那样。

此队列的头部是相对于指定排序的最小元素。如果多个元素以最低值绑定,则头部是这些元素之一——绑定被任意打破。队列检索操作 poll、remove、peek 和 element 访问队列头部的元素。

优先级队列是基于最小值还是最大值取决于语言和库,但最小队列是我所见过的最常见的。

于 2013-05-11T12:28:00.027 回答