java的PriorityQueue的内置迭代器不以任何特定顺序遍历数据结构.为什么?

Set*_*nig 11 java priority-queue

这直接来自Java Docs:

该类及其迭代器实现了Collection和Iterator接口的所有可选方法.方法iterator()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素.如果需要有序遍历,请考虑使用Arrays.sort(pq.toArray()).

基本上,我的PriorityQueue工作正常,但是使用自己内置的toString()方法将其打印到屏幕上会让我看到这个异常现象,并且想知道是否有人可以解释为什么它是迭代器提供的(并且使用过)内部)不按自然顺序遍历PriorityQueue?

use*_*421 28

因为底层数据结构不支持它.二进制堆只是部分排序,最小元素位于根.删除它时,将重新排序堆,以便下一个最小元素位于根.没有有效的有序遍历算法,因此Java中没有提供任何算法.