Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java';s的标准收藏。有吗?_Java_Collections_Queue_Priority Queue - Fatal编程技术网

Java';s的标准收藏。有吗?

Java';s的标准收藏。有吗?,java,collections,queue,priority-queue,Java,Collections,Queue,Priority Queue,我需要一个最大优先级队列数据结构 在Java中,我注意到它是一个最小优先级队列 从javadoc: 此队列的头是相对于队列的最小元素 指定顺序 我看到有一个选项可以提供一个定制的比较器,查看一些帖子,一些人建议使用一个比较器并进行反向比较,以获得最大优先级队列的结果 在我看来,这似乎是一个“丑陋的黑客”,也许不是直觉 这是从Java的标准集合获得最大优先级队列的唯一方法吗? 有没有更合适的对象我错过了?(例如,不久前我没有意识到Stack被Deque…我的坏)好的,是的,这是得到你想要的东西的最

我需要一个
最大优先级队列
数据结构

在Java中,我注意到它是一个
最小优先级队列

从javadoc:

此队列的头是相对于队列的最小元素 指定顺序

我看到有一个选项可以提供一个定制的
比较器
,查看一些帖子,一些人建议使用一个比较器并进行反向比较,以获得
最大优先级队列的结果

在我看来,这似乎是一个“丑陋的黑客”,也许不是直觉

这是从Java的标准集合获得
最大优先级队列的唯一方法吗?

有没有更合适的对象我错过了?(例如,不久前我没有意识到
Stack
Deque
…我的坏)

好的,是的,这是得到你想要的东西的最好方式。我真的不明白这是一个多么丑陋的黑客行为。如果只提供一个就足够了,那么提供两个不同的类是没有意义的。如果我们按照你的推理,我们会有一个MinTreeSet和一个maxtreeeset,一个MinTreeMap和一个maxtreeemap,等等,它们都在做完全相同的事情。这是战略模式的经典用法


只需使用以与自然顺序相反的顺序进行比较的比较器。

它不是最小堆。你误解了这一部分:

此队列的头是相对于队列的最小元素 指定顺序

重点是指定的顺序。这可以是任何东西,包括降序比较。提供您自己的比较器是如何使用的,它绝对不是一个“丑陋的黑客”

一开始:

此队列根据在中指定的顺序对元素进行排序 施工时间,根据其 自然顺序(见可比),或根据比较器, 取决于所使用的构造函数


这清楚地表明,提供您自己的比较器是预期的行为。

(+1)对于
集合。reverseOrder()
我认为这是一个丑陋的黑客行为,因为javadoc明确提到它是一个优先级队列。他们没有说,可以反转顺序并传递适当的比较器。但是你对战略的评论是有意义的,所以+1。只是我认为这一点从表面上看不清楚javadoc@user384706:优先级可以是任何东西。降序优先级与升序优先级一样有效。不要将其视为反向最小优先级,而应将其视为最大优先级,其中比较器直接指定了这一点。javadoc的第二句话说:优先级队列的元素按照其自然顺序排序,或者由队列构造时提供的比较器排序。我不认为它会更清楚。好的,指定了顺序,但指定了最小元素。@user384706:least在这里不是数字意义上的最小元素,在{3,1,2}中,1是最小的。根据指定的比较,从某种意义上说,它是“最不重要的”。@都铎:我看不出这与我的解释有什么不同。我的意思是,它是最不重要的,最不重要的。如果提供降序比较器,则最大值的优先级最低,即使在数字上它是最大值。这对于collections API来说是全局性的:无论比较器适用于何处,您都必须习惯“根据最小”或“相对于最小”的概念。它有一个具体的、明确的、有用的含义。