2011-10-28 21 views
7

que tiene un programa en Java que dice así PriorityQueueExample clase públicaJava: cola de prioridad

{

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); 

} 

}

Mi pregunta es ¿por qué la cola de prioridad las separe. De acuerdo con las especificaciones de java que implementa comparable y mantiene el orden de clasificación (clasificación natural)

Mi salida del programa es la siguiente: [1, 2, 3, 4, 5, 9, 7, 10, 6, 8 ]

Respuesta

7

La inserción en una cola de prioridad no es suficiente para ordenar una lista de elementos, ya que no los almacena en orden ordenado; los almacena en la orden de almacenamiento parcialmente ordenados. Usted tiene que quitar los elementos en un bucle para clasificarlos:

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

Se ordenadas, pero internamente los elementos se almacenan en un montón. Si llama al peek(), poll() o remove(), obtendrá el orden correcto (y así es como accede a las colas).

Cuestiones relacionadas