Java:PriorityQueue队列结果和自然排序

时间:2014-06-18 07:26:21

标签: java collections queue

我知道,队列遵循 FIFO (先进先出)顺序,但我不确定为什么以下输出出现在下面的java示例程序

JAVA示例

  public static void main(String args[]) {
            Queue<String> q = new PriorityQueue<String>();
            q.add("3");
            q.add("1");
            q.add("2");

            Iterator<String> itr = q.iterator();
            while (itr.hasNext()) {
                System.out.println(itr.next() + "    ");
            }
}

输出:

1    
3    
2   

根据java.util.PriorityQueue.PriorityQueue()

的Java文档
Creates a PriorityQueue with the default initial capacity (11) that orders its elements according to their natural ordering.
  • Q1)可以解释为什么输出为1 3 2以及如何输出    自然秩序在这里有效。

  • Q2)我检查了自然排序及其与之相关的问题    可比较/比较但不适用    排序(升序/降序)仅限订单?

1 个答案:

答案 0 :(得分:2)

Java中的PriorityQueue是一种数据结构,用于对其包含的元素进行排序。摘录自Javadoc

  

优先级队列的元素按其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。

无序输出的问题来自迭代器实现。另一个摘录,这次来自iterator()方法:

  

返回此队列中元素的迭代器。迭代器不会以任何特定顺序返回元素。

所以你不要用迭代器来java一个固定的顺序。如果在循环中使用poll()方法,则会按升序获得所有给定元素。

如果您正在寻找具有FIFO意义的队列,您可以查看LinkedList并仅使用addFirst()getLast()方法。