删除PriorityQueue的顶部?

假设我正在使用Java.util中的PriorityQueue类。 我想从PriorityQueue pq中删除最大的数字,我们假设它位于队列的头部。

以下工作会怎样?

// 1 int head = pq.peek(); pq.dequeue(head); // 2 int head = pq.dequeue(pq.peek()); 

对于非原始人来说,它的工作原理是否相同?

Queue#peekQueue#element Queue#peek返回Queue#element的头部值, Queue#pollQueue#remove return 并将其删除

看起来像

 int head = pq.poll(); 

是你想要的。

并且: 它只适用于非原始值,因为队列只存储对象。 诀窍是,(我猜)你的队列存储Integer数值,而Java 1.5+可以自动将结果转换为int基元(发件箱)。 所以感觉就像队列存储了int值。

peek() – 返回但不删除头值

poll() – 返回并删除头值

  PriorityQueue pq = new PriorityQueue(); 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]