我知道,队列遵循 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()
Creates a PriorityQueue with the default initial capacity (11) that orders its elements according to their natural ordering.
Q1)可以解释为什么输出为1 3 2以及如何输出 自然秩序在这里有效。
Q2)我检查了自然排序及其与之相关的问题 可比较/比较但不适用 排序(升序/降序)仅限订单?
答案 0 :(得分:2)
Java中的PriorityQueue是一种数据结构,用于对其包含的元素进行排序。摘录自Javadoc:
优先级队列的元素按其自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。
无序输出的问题来自迭代器实现。另一个摘录,这次来自iterator()
方法:
返回此队列中元素的迭代器。迭代器不会以任何特定顺序返回元素。
所以你不要用迭代器来java一个固定的顺序。如果在循环中使用poll()
方法,则会按升序获得所有给定元素。
如果您正在寻找具有FIFO意义的队列,您可以查看LinkedList
并仅使用addFirst()
和getLast()
方法。