为什么输出与预期的不同

时间:2015-11-08 11:45:15

标签: java

代码

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

2 个答案:

答案 0 :(得分:0)

来自doc:          PriorityQueue具有默认初始容量(11),根据其自然顺序对其元素进行排序。 元素()&amp; peek返回队列的头部。 第一次迭代后

Amit
Jai
Karan
Vijay
Rahul

删除()&amp; poll() - &gt;删除队列的头部。 第二次迭代后,输出将是

Karan
Rahul
Vijay

按预期工作!

答案 1 :(得分:0)

这是关于priorty排队的全部。 在优先级队列中,它存储在数组中,如数据结构。对于您的示例,它存储为;

[0] "Amit"
[1] "Jai"
[2] "Karan"
[3] "Vijay" 
[4] "Rahul"

始终零索引元素是顶部元素,当您查看或轮询时,将轮询第一个元素,并根据此更改数组。

第一次删除调用后,数组更改如下。

[0] "Jai"   
[1] "Rahul" 
[2] "Karan" 
[3] "Vijay" 

再次调用民意调查后;

[0] "Karan" 
[1] "Rahul" 
[2] "Vijay"

作为总结,top元素始终是最小的(或最大的)元素。弹出订单后更改。您可以在https://en.wikipedia.org/wiki/Priority_queue

上阅读详细信息