Removing top of PriorityQueue?
Assume that 开发者_开发技巧I am using the PriorityQueue class from Java.util. I want to remove the largest number from the PriorityQueue pq, which we assume is at the head of the queue.
Will the following work?
// 1
int head = pq.peek();
pq.dequeue(head);
// 2
int head = pq.dequeue(pq.peek());
Would this work the same for non-primitives as well?
Queue#peek
and Queue#element
return the head value of the queue, Queue#poll
and Queue#remove
return and remove it.
It looks like
int head = pq.poll();
is what you want.
And: it will only work for non-primitive values because a queue will store objects only. The trick is, that (I guess) your queue stores Integer
values and Java 1.5+ can automatically convert the results to int
primitives (outboxing). So it feels like the queue stored int
values.
peek()
- return but doesn't remove head value
poll()
- return and remove head value
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]
精彩评论