Removing the top of the PriorityQueue?

Suppose I use 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()); 

Will this work the same for non-primitives?

+4
source share
2 answers

Queue#peek and Queue#element return the initial value of the queue, Queue#poll and Queue#remove return and delete it.

Similar to

 int head = pq.poll(); 

- Is this what you want.

And: it will only work for non-primitive values, because the queue will only store objects. The trick is that (I think) your turn stores Integer values, and Java 1.5+ can automatically convert the results to int outboxing. Therefore, it feels that the int values ​​are in the queue.

+6
source

peek() - returns, but does not delete the value of the head

poll() - return and delete 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] 
+3
source

Source: https://habr.com/ru/post/1332736/


All Articles