2010-12-20 5 views
4

Angenommen, ich verwende die PriorityQueue-Klasse von Java.util. Ich möchte die größte Zahl aus der PriorityQueue pq entfernen, von der wir annehmen, dass sie sich an der Spitze der Warteschlange befindet.Entfernen der Spitze der PriorityQueue?

Funktioniert die folgende Arbeit?

// 1 
int head = pq.peek(); 
pq.dequeue(head); 

// 2 
int head = pq.dequeue(pq.peek()); 

Würde dies für Nicht-Primitive genauso funktionieren?

+2

Pflege uns zu erleuchten, warum Sie wollen 'nicht verwenden' poll()? – falstro

+1

Wo haben Sie die 'dequeue'-Methode gefunden? [Meine API zeigt es nicht an] (http://download.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html) ..? –

Antwort

6

Queue#peek und Queue#element Rückkehr der Hauptwert der Warteschlange, Queue#poll und Queue#remove return und entfernen.

Es sieht aus wie

int head = pq.poll(); 

ist das, was Sie wollen.

Und: es wird nur arbeiten für nicht-primitive Werte, weil eine Warteschlange nur Objekte speichern wird. Der Trick ist, dass (ich denke,) Ihre Warteschlange speichert Integer Werte und Java 1.5 + kann die Ergebnisse automatisch zu int Primitiven konvertieren (outboxing). So fühlt es sich wie die Warteschlange gespeichert int Werte.

+0

Vielen Dank für den Downvoting aber ... * warum *? –

3

peek() - Rückkehr aber entfernen Kopf Wert

poll() nicht - zurück und entfernen Sie den Kopf Wert

 PriorityQueue<Integer> pq = new PriorityQueue<Integer>(); 

     pq.add(2);pq.add(3); 

     System.out.println(pq); // [2, 3] 
     System.out.println(pq.peek()); // head 2 
     System.out.println(pq); // 2 still exists. [2, 3] 
     System.out.println(pq.poll()); // 2. remove head (2) 
     System.out.println(pq); // [3]