2010-12-20 4 views
4

Java.utilのPriorityQueueクラスを使用しているとします。 PriorityQueue pqから最大の数を削除したいと考えています。キューの先頭にあると仮定しています。PriorityQueueのトップを削除しますか?

以下は動作しますか?

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

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

これは非プリミティブでも同じですか?

+2

ケアをリターンし、削除しますか? – falstro

+1

'dequeue'メソッドはどこにありますか? [私のAPIは表示されません](http://download.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html)..? –

答えて

6

Queue#peekQueue#elementキューの先頭の値を返し、Queue#pollQueue#removeリターンにそれを削除します。

int head = pq.poll(); 

はあなたが望むものであるように見えます。

そして:は、プリミティブ以外の値に対してのみ機能します。キューにはオブジェクトのみが格納されるからです。そのトリックは、あなたのキューストアIntegerの値とJava 1.5+は、結果をintプリミティブ(アウトボックス)に自動的に変換できます。だからのキューにintの値が格納されているように感じます。

+0

おかげで下降しますが.. *なぜ*? –

3

peek() - リターンが、頭値

poll()は削除されません - あなたは `世論調査()`を使用したくない理由を、私たちを啓発するためにヘッド値に

 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] 
関連する問題