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

How does this priority queue work?

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

我想我在 [2,4,8] 时明白了,但在那之后我就不明白了。谁能告诉我这段代码是如何工作的?

根据 the documentationPriorityQueueAbstractCollection 继承其 toString() 功能,它声明它打印出由iterator() 括号内。

查看 PriorityQueue

iterator() 方法

Returns an iterator over the elements in this queue. The iterator does not return the elements in any particular order.

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