我定义最大优先级队列如下:
PriorityQueue<Integer> queue = new PriorityQueue<>(Collections.reverseOrder());
queue.add(25);
queue.add(3);
queue.add(1);
queue.add(3);
queue.add(4);
我需要理解这是如何工作的,特别是当1只得到2的索引(而不是4)时?
多谢了。
它没有保证的顺序(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 (!queue.isEmpty()) {
var element = queue.poll();
...
}
编辑:
如果您想查看类的内部,这部分代码可能是相关的(它基本上使用了一个堆数据结构):
/**
* Priority queue represented as a balanced binary heap: the two
* children of queue[n] are queue[2*n+1] and queue[2*(n+1)]. The
* priority queue is ordered by comparator, or by the elements'
* natural ordering, if comparator is null: For each node n in the
* heap and each descendant d of n, n <= d. The element with the
* lowest value is in queue[0], assuming the queue is nonempty.
*/
transient Object[] queue;
这个类使用称为堆的结构,并将其存储在数组中。
当您轮询
对象时,您将以正确的顺序接收对象。
我正在编写一个最小优先级队列和一个最大优先级队列,如下所示: 输入数组的数字将一个接一个地添加到队列中。然而,当数组[12,4,5,3,8,7]是一个样本输入,打印优先队列的输出是: MIN:[3.0, 4.0, 5.0, 12.0, 8.0, 7.0]MAX:[12.0, 8.0, 7.0, 3.0, 4.0, 5.0] 我定义的比较器有什么问题吗?提前感谢你的帮助。
本文向大家介绍python实现最大优先队列,包括了python实现最大优先队列的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python实现最大优先队列的具体代码,供大家参考,具体内容如下 说明:为了增强可复用性,设计了两个类,Heap类和PriorityQ类,其中PriorityQ类继承Heap类,从而达到基于最大堆实现最大优先队列。 测试结果: 以上就是本文的全部内容,希望对大
我的问题是:每个节点的优先级是什么?我认为它是最小值的传入边缘的权重,但我不确定。这是真的吗? 第二个问题,当我提取队列的根时,如果这个节点不与任何一个被访问的节点邻接,它将如何工作?
注意:我知道可以用比较器创建优先级队列,然后重复调用Add。
考虑下面的优先级类声明<代码>类优先级队列 我的想法: 我能想到的一件事是,这将强制优先级队列使用对象比较器,并且不会提供实现其自定义比较器的能力,因为类的用户可能希望基于某个不同的比较器构建队列。
优先级队列(Priority Queue) 注:队列是一种特征为FIFO的数据结构,每次从队列中取出的是最早加入队列中的元素。但是,许多应用需要另一种队列,每次从队列中取出的应是具有最高优先权的元素,这种队列就是优先级队列(Priority Queue),也称为优先权队列。 1. 优先级队列的概念 1.1 优先级队列的定义 优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优