【问题标题】:add to PriorityQueue<Integer> [duplicate]添加到 PriorityQueue<Integer> [重复]
【发布时间】:2017-05-06 12:01:45
【问题描述】:
为此:
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(2);
System.out.println(pq);
pq.add(4);
System.out.println(pq);
pq.add(1);
System.out.println(pq);
我得到这个输出:
[2]
[2, 4]
[1, 4, 2]
为什么第三行的输出不是[2,4,1]?
【问题讨论】:
标签:
java
queue
priority-queue
【解决方案1】:
没有地方写到PriorityQueue 的toString 实现按顺序返回它们。其实问题是:
-
PriorityQueue 没有提供 toString() 实现,因此使用了 AbstractCollection::toString()。
-
AbstractCollection::toString() 使用 iterator() 方法打印项目(因此通过调用 next() 和 hasNext())
- 有关
PriorityQueue::iterator 的文档指出:返回此队列中元素的迭代器。迭代器不会以任何特定顺序返回元素。
所以基本上toString 依赖于iterator(),它不提供元素的有序视图。