2015-11-08 98 views
0

代码

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 
+0

的详细信息请缩进您的代码并编辑您的问题以包含输出。 – Arc676

+0

这是很好的,你正在显示你的代码,但也请添加一些文本(不是在问题标题),说明你正在努力实现什么以及如何出错。另外,你的代码似乎在其中有虚假的'
'标签,并且可能通过使用缩进使其更具可读性? – jochen

回答

0

从DOC: 的PriorityQueue使用默认的初始容量(11),根据自己的自然顺序对其元素。 element()& peek返回队列的头部。 第一次迭代后

Amit 
Jai 
Karan 
Vijay 
Rahul 

删除()&轮询() - >删除队列的头部。 经过第二次迭代后,输出将为

Karan 
Rahul 
Vijay 

它按预期工作!

0

这是关于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

+0

Ugur Basak @我同意你,但你怎么做indexing.first第一次你把“rahul”在底部为什么? –

+0

Rakesh,实际上我使用Eclipse的变量视图获得了这个值。 此动画还可以帮助您查看后端的情况https://www.cs.usfca.edu/~galles/visualization/Heap.html每次插入时,最大值/最小值都会尝试到达顶部索引,通过交换价值。每次交换都会通过到达阵列的下半部分来实现。对于拉胡尔来说,拉胡尔加入到第五指数中,我们将其与第二指数进行比较,第二指数比拉胡尔小,我们不进行掉期操作。但如果它小于第二个,那么我们也需要交换它。 –

+0

Ugur basak @这是Priority Queue工作的方式吗? –

相关问题