Java PriorityQueue行为,在队列中包含3个元素

时间:2017-05-16 04:43:17

标签: java priority-queue

根据PriorityQueue的定义,它说:

  

优先级队列的元素按照它们的顺序排序   自然排序,或由队列建设时提供的比较器   时间,取决于使用的构造函数。

但是当我尝试在队列中使用3个元素时,元素似乎没有正确排序。

    Queue<Integer> q2 = new PriorityQueue<Integer>();
    q2.add(9);
    q2.add(7);
    q2.add(8);

    Iterator<Integer> i = q2.iterator();
    while(i.hasNext()){
        Integer e = i.next();
        System.out.println(e);
    }

输出:

7
9
8

[编辑] 如果元素的数量是4,则排序看起来是正确的

    q2.add(9);
    q2.add(7);
    q2.add(8);
    q2.add(5);

    Iterator<Integer> i = q2.iterator();
    while(i.hasNext()){
        Integer e = i.next();
        System.out.println(e);
    }

输出:

5
7
8
9

1 个答案:

答案 0 :(得分:-1)

问题是您使用的Iterator在队列遍历期间不保证任何顺序。 PriorityQueue的Javadoc说:

  

方法iterator()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果您需要有序遍历,请考虑使用Arrays.sort(pq.toArray())。

轮询队列时,您将获得正确的顺序:

while (!q2.isEmpty()) {
  System.out.println(q2.poll());
}