如何解决添加一些随机元素时,PriorityQueue 中的优先级将如何分配?
当我在 PriorityQueue 中添加一些随机数时,当我打印 PriorityQueue 时,元素以不同的顺序打印。
这是怎么回事?
示例
PriorityQueue<Integer> s=new PriorityQueue<Integer>();
s.add(22);
s.add(212);
s.add(423);
s.add(323);
s.add(1);
System.out.print(s);
output:
[1,22,423,323,212]
解决方法
它没有保证顺序(https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/PriorityQueue.html):
方法Iterator
中提供的iterator()
和方法Spliterator
中提供的spliterator()
不能保证以任何特定顺序遍历优先级队列的元素。如果您需要有序遍历,请考虑使用 Arrays.sort(pq.toArray())
。
通常,您使用 poll()
方法根据元素的自然顺序检索元素,例如:
while (!pq.isEmpty()) {
var element = pq.poll();
...
}
,
toString()
返回优先级队列内部存储的表示,而不是元素的逻辑顺序。 toArray()
和迭代也是如此:这些方法都不能保证元素将按其优先级顺序返回。
如果要按优先级顺序获取元素,则需要单独poll()
它们(从而销毁队列)。因此,如果您想以特定顺序列出元素,PriorityQueue
不是合适的数据结构。 SortedSet
在这里更合适。相比之下,队列数据结构(其中 PriorityQueue
是一个特例)用于接收和检索元素一次,而不是用于检查静态数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。