优先队列行为不端

时间:2012-11-27 12:21:21

标签: java

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的位置,这将按预期工作。

2 个答案:

答案 0 :(得分:7)

toString() method for the AbstractCollection classPriorityQueue使用的)表明它:

  

返回此集合的字符串表示形式。字符串表示由一个集合元素的列表组成,它们按迭代器返回的顺序排列,用方括号括起来(“[]”)。

如果查看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