删除PriorityQueue的顶部?
假设我正在使用Java.util中的PriorityQueue类。 我想从PriorityQueue pq中删除最大的数字,我们假设它位于队列的头部。
以下工作会怎样?
// 1 int head = pq.peek(); pq.dequeue(head); // 2 int head = pq.dequeue(pq.peek());
对于非原始人来说,它的工作原理是否相同?
Queue#peek
和Queue#element
Queue#peek
返回Queue#element
的头部值, Queue#poll
和Queue#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]