【问题标题】:Removing top of PriorityQueue?删除 PriorityQueue 的顶部?
【发布时间】:2011-05-28 03:54:25
【问题描述】:
假设我正在使用 Java.util 中的 PriorityQueue 类。我想从 PriorityQueue pq 中删除最大的数字,我们假设它位于队列的头部。
以下是否有效?
// 1
int head = pq.peek();
pq.dequeue(head);
// 2
int head = pq.dequeue(pq.peek());
这对非原始人也同样有效吗?
【问题讨论】:
标签:
java
queue
priority-queue
【解决方案1】:
Queue#peek和Queue#element返回队列的头值,Queue#poll和Queue#remove返回并删除它。
看起来像
int head = pq.poll();
是你想要的。
并且:它仅适用于非原始值,因为队列将仅存储对象。诀窍是,(我猜)您的队列存储Integer 值,Java 1.5+ 可以自动将结果转换为int 原语(发件箱)。所以它感觉就像队列中存储了int 值。
【解决方案2】:
peek() - 返回但不删除头部值
poll() - 返回并移除 head 值
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]