Java 试图理解PriorityQueue

Java 试图理解PriorityQueue,java,Java,我试过浏览许多网站,例如: 但他们似乎没有回答我的问题 更具体地说,我正在尝试实现一个自定义优先级队列,其中我只能有一个零/1参数构造函数,它可以是zero/容量/p-Queue对象。考虑到线程,这可能吗 谈论2-arg构造函数(容量,比较器) 添加:p-Queue的值是否始终作为二叉树存储和检索?难道他们不总是已经被分类了吗?e、 g.[5,6,6,64,9]关于施工人员 PriorityQueue已具有零参数构造函数。你自己可以看到 如果你读了这本书,很容易。我不能说这是否符合你的目的

我试过浏览许多网站,例如:

但他们似乎没有回答我的问题

更具体地说,我正在尝试实现一个自定义优先级队列,其中我只能有一个零/1参数构造函数,它可以是
zero
/
容量
/
p-Queue
对象。考虑到线程,这可能吗

谈论2-arg构造函数(
容量
比较器

添加:p-Queue的值是否始终作为二叉树存储和检索?难道他们不总是已经被分类了吗?e、 g.
[5,6,6,64,9]

关于施工人员
PriorityQueue
已具有零参数构造函数。你自己可以看到 如果你读了这本书,很容易。我不能说这是否符合你的目的。信息技术 是否要求您使用实现可比较的类型(例如字符串、整数) 否则,队列将无法知道如何对元素排序

capacity
PriorityQueue
的情况下,不是最大容量,而是关于 您认为队列中同时会有多少个元素。它只有性能 它们的语义与此完全无关

存储和检索语义 这些值按任意顺序存储(插入),但按顺序检索。这就是问题所在 优先级队列的点。每次附加到时自动排序的列表 它将为您提供与javas
PriorityQueue
完全相同的语义。列表实现的效率非常低,这就是为什么要使用堆

我不确定这是否是对你所问问题的回应,所以如果不是,请回答
澄清您的困惑。

您可以查看队列是堆。“它们不是两种截然不同的东西。”杰伦·德·舒特,谢谢。我确实看过了,但我还有一些问题。例如,最重要的答案集中在2-arg构造函数上,但是在参数为相同对象类型(P-Queue)的情况下,是否可以只使用1-arg构造函数而不使用comparator对象?如果队列对象实现comparable,则不需要comparator。对于这类问题,javadocs是一个很好的资源:谢谢。我的任务是为构造函数实现带有0/1/2参数的P-Queue,因此我想我必须以多种方式实现它们。对于存储和检索部分,我看到P-Queue将元素添加到列表的后面,但当我提供(元素)时,它会在删除该元素后以某种方式重新排序列表的排列。这就是P-Queue的工作原理吗?它根本不适用于列表,但其语义与在每次插入后重新排序列表相同,而不是在每次轮询后。我认为在优先级队列的情况下,offer和add是同义词。如果您的任务是实现优先级队列,也许您不应该过多考虑如何实现标准队列。好吧,也许我应该问问,实现add/remove/peek的最佳方法是什么?add()应该立即对数组进行排序,以便remove可以删除第一个元素,还是add()应该将其添加到前面,然后remove/peek将遍历以查找优先级最高的元素?哪种方法是最好的方法?两者都不是,最好的方法是使用堆。此外,如果这类似于学校作业,那么我怀疑排序列表解决方案是否会被接受。