这个优先队列是如何工作的?
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 documentation,PriorityQueue
从 AbstractCollection
继承其 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()
之后将它们打印出来,在这种情况下,它们会按照预期的自然(数字)顺序排序。
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 documentation,PriorityQueue
从 AbstractCollection
继承其 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()
之后将它们打印出来,在这种情况下,它们会按照预期的自然(数字)顺序排序。