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

时间:2015-05-05 06:06:11

标签: java priority-queue

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]然后我不明白。有谁能告诉我这段代码是如何工作的?

1 个答案:

答案 0 :(得分:1)

根据the documentationPriorityQueue继承了toString()的{​​{1}}功能,该功能声明它打印出{AbstractCollection返回的集合元素。括号中的1}}。

查看iterator()的{​​{1}}方法,

  

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

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