当前位置: 首页 > 知识库问答 >
问题:

最大优先级队列函数

公良昕
2023-03-14

我定义最大优先级队列如下:

    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)时?

多谢了。

共有2个答案

东方和煦
2023-03-14

它没有保证的顺序(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;
端木志诚
2023-03-14

这个类使用称为堆的结构,并将其存储在数组中。

当您轮询对象时,您将以正确的顺序接收对象。

 类似资料:
  • 我正在编写一个最小优先级队列和一个最大优先级队列,如下所示: 输入数组的数字将一个接一个地添加到队列中。然而,当数组[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 优先级队列的定义 优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优