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

我在学习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
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