2011-10-28 2 views
7

J'ai un programme java qui va comme ceciJava: Priorité Queue

PriorityQueueExample public class {

public static void main(String[] args) { 
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); 
    pq.add(10); 
    pq.add(1); 
    pq.add(9); 
    pq.add(2); 
    pq.add(8); 
    pq.add(3); 
    pq.add(7); 
    pq.add(4); 
    pq.add(6); 
    pq.add(5); 
System.out.println(pq); 

} 

}

Ma question est pourquoi ne pas les trier la file d'attente prioritaire. Selon les spécifications java il met en œuvre des comparables et maintient l'ordre de tri (tri naturel)

Ma sortie du programme est la suivante: [1, 2, 3, 4, 5, 9, 7, 10, 6, 8 ]

Répondre

7

L'insertion dans une file d'attente prioritaire ne suffit pas pour trier une liste d'éléments, car elle ne les stocke pas dans l'ordre de tri; il les stocke dans l'ordre de segment partiellement trié. Vous devez supprimer les éléments dans une boucle pour les trier:

while (pq.size() > 0) 
    System.out.println(pq.remove()); 
7

Il est trié, mais en interne les éléments sont stockés dans un tas . Si vous appelez peek(), poll() ou remove(), vous obtiendrez la bonne commande (et c'est ainsi que vous accéderez aux files d'attente).