开发者

Removing top of PriorityQueue?

开发者 https://www.devze.com 2023-01-31 05:08 出处:网络
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.

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]
0

精彩评论

暂无评论...
验证码 换一张
取 消