Java 如何在优先级队列中设置优先级
我在学习Java,并试图学习集合中的优先级队列。我在一个网站上尝试了以下示例:Java 如何在优先级队列中设置优先级,java,Java,我在学习Java,并试图学习集合中的优先级队列。我在一个网站上尝试了以下示例: import java.util.*; class S { public static void main(String args[]) { PriorityQueue<String> queue=new PriorityQueue<String>(); queue.add("Amit"); queue.add("Vija
import java.util.*;
class S
{
public static void main(String args[])
{
PriorityQueue<String> queue=new PriorityQueue<String>();
queue.add("Amit");
queue.add("Vijay");
queue.add("Karan");
queue.add("Rahul");
queue.add("Jai");
System.out.println("iterating the queue elements:");
Iterator<String> itr=queue.iterator();
while(itr.hasNext())
{
System.out.println(itr.next());
}
}
}
我期待的结果是:
Amit
Vijay
Karan
Rahul
Jai
我无法理解结果如何改变我的预期,以及使用了什么类型的正常或默认优先级。如果我希望得到与预期相同的结果,我应该使用prioiryqueue做什么 请帮帮我 这里我想知道优先级队列中默认排序的确切原因。引用javadoc of: 方法
Iterator()
中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素
如您所见,使用iterator()
时,PriorityQueue
的顺序并不重要。现在,如果您开始使用poll()
从队列中获取值,您将按照字典顺序获取值,即String
的自然顺序
如果您想要一个按插入顺序返回项目的队列,请使用常规的
队列
实现,如LinkedList
或ArrayDeque
您需要使用comparator对数据进行排序。还有一件事..根据我的问题,我在eclipse中使用Debug进行了检查,队列显示的元素顺序与迭代器显示的相同。我还试图理解词典,但仍然无法理解这是如何为默认排序插入的。@SumitKumarAgarwal对于PriorityQueue
,排序(默认或其他)适用于poll()
和remove()
,而不是iterator()
。Eclipse使用toString()
进行显示,而内部使用iterator()
。Eclipse还显示了名为queue
的支持数组,它是平衡二叉树的平面表示,这也解释了奇怪的迭代顺序。
Amit
Vijay
Karan
Rahul
Jai