2010-12-20 68 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 2010-12-20 09:29:32

+1

你從哪裏找到'dequeue'方法? [我的API不顯示](http://download.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html)..? – 2010-12-20 09:33:59

回答

6

Queue#peekQueue#element回報隊列的頭值,Queue#pollQueue#remove回報並刪除它。

它看起來像

int head = pq.poll(); 

是你想要的。

而且:它只會只有適用於非基元值,因爲隊列將僅存儲對象。訣竅是,(我猜)你的隊列商店Integer值和Java 1.5+可以自動將結果轉換爲int基元(outboxing)。所以它感覺像隊列存儲的int值。

+0

謝謝你的反對,但.. *爲什麼*? – 2010-12-20 10:11:13

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]