PriorityQueue<Integer> queue = new PriorityQueue<Integer>(4);
queue.add(8);
queue.add(5);
queue.add(23);
queue.add(6);
System.out.println(queue);
友 上面的代码在Ubuntu 12.10和Oracle Java 1.6和Java 1.7上,它打印输出为
[5, 6, 23, 8]
我认为这是错误的。这应该打印为[5, 6, 8, 23]
这是一个缺陷吗?或者我对优先级队列的理解是错误的?
除此之外,如果我在之前或之后更改向PriorityQueue添加23的位置,这将按预期工作。
答案 0 :(得分:7)
toString()
method for the AbstractCollection
class(PriorityQueue
使用的)表明它:
返回此集合的字符串表示形式。字符串表示由一个集合元素的列表组成,它们按迭代器返回的顺序排列,用方括号括起来(“[]”)。
如果查看docs for the PriorityQueue iterator,请说明:
返回此队列中元素的迭代器。迭代器不会以任何特定顺序返回元素。
优先级仅在您从队列中提取项目时才会播放,而不是在您获得字符串表示时。
答案 1 :(得分:4)
这只是字符串表示。尝试多次致电remove()
。
System.out.println(queue.remove());
System.out.println(queue.remove());
System.out.println(queue.remove());
System.out.println(queue.remove());
这将导致
5
6
8
23