假設我使用Java.util中的PriorityQueue類。我想從PriorityQueue pq中刪除最大的數字,我們假設它位於隊列的頭部。刪除PriorityQueue的頂部?
請問以下工作?
// 1
int head = pq.peek();
pq.dequeue(head);
// 2
int head = pq.dequeue(pq.peek());
對於非基元類型,這種方法是否也適用?
假設我使用Java.util中的PriorityQueue類。我想從PriorityQueue pq中刪除最大的數字,我們假設它位於隊列的頭部。刪除PriorityQueue的頂部?
請問以下工作?
// 1
int head = pq.peek();
pq.dequeue(head);
// 2
int head = pq.dequeue(pq.peek());
對於非基元類型,這種方法是否也適用?
Queue#peek
和Queue#element
回報隊列的頭值,Queue#poll
和Queue#remove
回報並刪除它。
它看起來像
int head = pq.poll();
是你想要的。
而且:它只會只有適用於非基元值,因爲隊列將僅存儲對象。訣竅是,(我猜)你的隊列商店Integer
值和Java 1.5+可以自動將結果轉換爲int
基元(outboxing)。所以它感覺像隊列存儲的int
值。
謝謝你的反對,但.. *爲什麼*? – 2010-12-20 10:11:13
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]
護理開導我們,爲什麼你不想使用'民意調查()'? – falstro 2010-12-20 09:29:32
你從哪裏找到'dequeue'方法? [我的API不顯示](http://download.oracle.com/javase/6/docs/api/java/util/PriorityQueue.html)..? – 2010-12-20 09:33:59