优先级队列实现

时间:2013-05-11 12:20:31

标签: java priority-queue comparable

我正在尝试构建优先级队列,但在测试时似乎存在一些不一致。我覆盖了方法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());
} 

1 个答案:

答案 0 :(得分:2)

Java的java.util.PriorityQueue被定义为返回最少的元素,而不是最大的元素,你可以通过查看文档找到它。

  

这个队列的头部是关于的队列中最少的元素   指定的排序。如果多个元素绑定最小值,则   头是这些元素之一 - 关系是任意打破的。该   队列检索操作poll,remove,peek和element访问   队列头部的元素。

优先级队列是基于最小值还是最大值取决于语言和库,但最小队列是最常见的,就像我看到的那样。