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は、ドキュメントを確認してわかるように、最大​​の要素ではなく、最小の要素を返すと定義されています。

このキューの先頭は、指定された順序に関して最小の要素です。複数の要素が最小値で結合されている場合、ヘッドはそれらの要素の 1 つです。結合は任意に解除されます。キューの取得操作は、キューの先頭にある要素にポーリング、削除、ピーク、および要素アクセスします。

プライオリティ キューが最小値に基づくか最大値に基づくかは、言語とライブラリによって異なりますが、私が見た限りでは最小値キューが最も一般的です。

于 2013-05-11T12:28:00.027 に答える