Question

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?

No correct solution

OTHER TIPS

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]
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top