优先队列行为不端

Ant*_*ony 2 java

PriorityQueue<Integer> queue = new PriorityQueue<Integer>(4);
queue.add(8);
queue.add(5);
queue.add(23);
queue.add(6);
System.out.println(queue);
Run Code Online (Sandbox Code Playgroud)

朋友们,上面的代码在Ubuntu 12.10和Oracle Java 1.6和Java 1.7上,它打印输出为

[5, 6, 23, 8]
Run Code Online (Sandbox Code Playgroud)

我认为这是错误的.这应该打印出来,因为[5, 6, 8, 23] 这是一个缺陷吗?或者我对优先级队列的理解是错误的?

除此之外,如果我在之前或之后更改向PriorityQueue添加23的位置,这将按预期工作.

pax*_*blo 7

toString()方法AbstractCollection(PriorityQueue使用的方法)表明它:

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

如果查看PriorityQueue迭代器文档,它会指出:

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

优先级仅在您从队列中提取项目时才会播放,而不是在您获得字符串表示时.