我正在学习Java并尝试学习集合中的优先级队列。我在一个网站上尝试了以下示例:
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
Jai
Karan
Vijay
Rahul`
我期待结果为:
Amit
Vijay
Karan
Rahul
Jai
我无法理解结果如何从我的期望中改变,以及使用什么类型的正常或默认优先级 如果我希望得到与我的期望相同的结果,我应该怎么做prioiryqueue?
请帮帮我。
这里我想要优先队列中默认排序的确切原因。
答案 0 :(得分:2)
引用PriorityQueue
的javadoc:
方法
iterator()
中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。
如您所见,使用PriorityQueue
时iterator()
的排序无关紧要。现在,如果您开始使用poll()
从队列中获取值,您将获得按字典顺序排列的值,即String
的自然顺序。
如果您想要一个按插入顺序返回项目的队列,请使用常规Queue
实施,例如LinkedList
或ArrayDeque
。