2013-05-11 2 views
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()); 
} 

ответ

2

в Java java.util.PriorityQueue определяется как возвращающая наименьший элемент, не самый большой элемент, как вы можете найти, проверив документы.

Глава этой очереди является наименьшим элементом в отношении заданного порядка . Если несколько элементов привязаны к наименьшему значению, то голова является одним из этих элементов - связи сломаны произвольно. Опрос обследований очереди, удаление, просмотр и элемент получают доступ к элементу во главе очереди.

Независимо от того, основана ли очередь приоритетов на минимуме или максимуме, зависит от языка и библиотеки, но минимальные очереди по жиру являются наиболее распространенными из того, что я видел.

+0

спасибо, что это было очень полезно – user2326847