Java 正在删除优先级队列的顶部?
假设我正在使用Java.util中的PriorityQueue类。我想从PriorityQueue pq中删除最大的数字,我们假设它位于队列的最前面 下面的方法行吗Java 正在删除优先级队列的顶部?,java,queue,priority-queue,Java,Queue,Priority Queue,假设我正在使用Java.util中的PriorityQueue类。我想从PriorityQueue pq中删除最大的数字,我们假设它位于队列的最前面 下面的方法行吗 // 1 int head = pq.peek(); pq.dequeue(head); // 2 int head = pq.dequeue(pq.peek()); 这对非原语也同样有效吗?队列#peek和队列#元素返回队列的头值,队列#轮询和队列#删除返回并删除它 看起来像 int head = pq.poll(); 这
// 1
int head = pq.peek();
pq.dequeue(head);
// 2
int head = pq.dequeue(pq.peek());
这对非原语也同样有效吗?队列#peek
和队列#元素
返回队列的头值,队列#轮询
和队列#删除
返回并删除它
看起来像
int head = pq.poll();
这就是你想要的
而且:它只对非基本值有效,因为队列只存储对象。诀窍在于(我猜)您的队列存储Integer
值,Java 1.5+可以自动将结果转换为int
原语(outboxing)。因此它感觉像是队列存储了int
值。peek()
-返回,但不删除头值
poll()
-返回并删除头值
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]
PriorityQueue pq=new PriorityQueue();
pq.增加(2);pq.增加(3);
系统输出打印LN(pq);//[2, 3]
System.out.println(pq.peek());//总目2
系统输出打印LN(pq);//2仍然存在。[2, 3]
System.out.println(pq.poll());//2.拆下泵头(2)
系统输出打印LN(pq);//[3]
请告诉我们为什么您不想使用poll()
?您在哪里找到了出列方法。。?谢谢你的否决,但是。。为什么?