为什么是我们所期望的输出不同
代码
import java.util.*;
class TestCollection12 {
public static void main(String args[]) {
PriorityQueue<String> queue = new PriorityQueue<String>();
queue.add("Amit");
queue.add("Vijay");
queue.add("Karan");
queue.add("Jai");
queue.add("Rahul");
System.out.println("head:"+queue.element());
System.out.println("head:"+queue.peek());
System.out.println("iterating the queue elements:");
Iterator itr=queue.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
queue.remove();
queue.poll();
System.out.println("after removing two elements:");
Iterator<String> itr2=queue.iterator();
while (itr2.hasNext()) {
System.out.println(itr2.next());
}
}
}
预计
amit amit amit vijay karan jai rahul
karan jai rahul
从DOC: 的PriorityQueue使用默认的初始容量(11),根据自己的自然顺序对其元素。 element()& peek返回队列的头部。 第一次迭代后
Amit
Jai
Karan
Vijay
Rahul
删除()&轮询() - >删除队列的头部。 经过第二次迭代后,输出将为
Karan
Rahul
Vijay
它按预期工作!
这是关于priorty队列。 在优先级队列中,它像数据结构一样存储在数组中。对于你的例子它被存储为;
[0] "Amit"
[1] "Jai"
[2] "Karan"
[3] "Vijay"
[4] "Rahul"
总是零索引的元素是所述顶部元件,而当你偷看或轮询的第一个被轮询,并且阵列根据该改变。
第一次删除呼叫后,数组更改如下。
[0] "Jai"
[1] "Rahul"
[2] "Karan"
[3] "Vijay"
再次调用poll之后;
[0] "Karan"
[1] "Rahul"
[2] "Vijay"
作为总结,最上面的元素总是最小的(或最大的)一个。弹出订单更改后。您可以阅读https://en.wikipedia.org/wiki/Priority_queue
Ugur Basak @我同意你,但你怎么做indexing.first第一次你把“rahul”在底部为什么? –
Rakesh,实际上我使用Eclipse的变量视图获得了这个值。 此动画还可以帮助您查看后端的情况https://www.cs.usfca.edu/~galles/visualization/Heap.html每次插入时,最大值/最小值都会尝试到达顶部索引,通过交换价值。每次交换都会通过到达阵列的下半部分来实现。对于拉胡尔来说,拉胡尔加入到第五指数中,我们将其与第二指数进行比较,第二指数比拉胡尔小,我们不进行掉期操作。但如果它小于第二个,那么我们也需要交换它。 –
Ugur basak @这是Priority Queue工作的方式吗? –
的详细信息请缩进您的代码并编辑您的问题以包含输出。 – Arc676
这是很好的,你正在显示你的代码,但也请添加一些文本(不是在问题标题),说明你正在努力实现什么以及如何出错。另外,你的代码似乎在其中有虚假的'
'标签,并且可能通过使用缩进使其更具可读性? – jochen