Java 这个优先级队列是如何工作的?

Java 这个优先级队列是如何工作的?,java,priority-queue,Java,Priority Queue,我想当它是[2,4,8]时我理解了,但之后我就不理解了。有谁能告诉我这段代码是如何工作的吗?根据,PriorityQueue从AbstractCollection继承了它的toString()功能,该功能表示它打印出由迭代器()返回的集合元素,并将其放在括号中 查看PriorityQueue的iterator()方法 返回此队列中元素的迭代器。迭代器不会以任何特定顺序返回元素 因此,在调用remove()后将它们打印出来之前,程序的输出没有任何意义,在这种情况下,它们会按照预期的自然(数字)顺序

我想当它是[2,4,8]时我理解了,但之后我就不理解了。有谁能告诉我这段代码是如何工作的吗?

根据,
PriorityQueue
AbstractCollection
继承了它的
toString()
功能,该功能表示它打印出由
迭代器()返回的集合元素,并将其放在括号中

查看
PriorityQueue
iterator()
方法

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


因此,在调用
remove()
后将它们打印出来之前,程序的输出没有任何意义,在这种情况下,它们会按照预期的自然(数字)顺序进行排序。

您到底期望什么?你不明白什么?我不明白3放在8前面,4放在8后面的部分。元素按正确的顺序被移除,你会感到惊讶什么?我想问的是为什么它从q[1]=4开始,突然q[3]=4和q[2]没有碰撞到q[3],而不是q[1]碰撞到q[3]哦,好的,这完全回答了我的问题。非常感谢!!!!我认为在印刷之前,特定的订单背后有一个原因。很高兴!如果有帮助,别忘了投票/接受;)
import java.util.PriorityQueue;

public class QueueInts{
  public static void main(String[] args) {
    PriorityQueue<Integer> q = new PriorityQueue<>();
    String expression = "(2+4)-8 * (3-1)";
    String symbols = "()+-*/% ";

    for (int i = 0; i < expression.length(); i++) {
      if (!symbols.contains("" + expression.charAt(i)))           
          q.add((int)expression.charAt(i)-48);
      System.out.println(q);
    }

    System.out.println(q);
    while (q.size() > 0)      
        System.out.println(" " + q.remove());     
}
}
[2]

[2]

[2, 4]

[2, 4]

[2, 4]

[2, 4, 8]

[2, 4, 8]

[2, 4, 8]

[2, 4, 8]

[2, 4, 8]

[2, 3, 8, 4]

[2, 3, 8, 4]

[1, 2, 8, 4, 3]

[1, 2, 8, 4, 3]

[1, 2, 8, 4, 3]

 1

 2

 3

 4

 8