【问题标题】:Confused on Deitel's wording in regards to highest-priority element in a priority queue对 Deitel 关于优先级队列中最高优先级元素的措辞感到困惑
【发布时间】:2016-05-30 01:50:39
【问题描述】:

我目前正在阅读 Deitel 的 Java How to program 这本书,其中一些措辞似乎令人困惑。我想知道是否有人可以解释这一点,因为它似乎具有误导性。

将元素添加到 PriorityQueue 时,元素按优先级顺序插入,最高优先级的元素(即最大值)将是从 PriorityQueue 中删除的第一个元素。

让我感到困惑的部分是它说最高优先级的元素(最大值)将被删除。根据该声明,如果我要在一个 PriorityQueue 中添加 9.8、5.4 和 3.2,那么我希望它按该顺序删除/轮询 PriorityQueue,无论我在插入它们时将它们放置在什么顺序。

但是,在我的代码示例中,我注意到了相反的情况。元素被移除的顺序是从最小的数量开始。在阅读 javadocs 时,我看到它在哪里说“这个队列的头部是相对于指定排序的最少元素”,这与我使用代码示例时发现的一致。

这是否意味着这本书是错误的,或者我只是没有理解这本书用来描述这个概念的措辞?

【问题讨论】:

  • 他错了,Javadoc 是正确的。但是,您可以定义一个颠倒顺序的Comparator

标签: java collections queue priority-queue


【解决方案1】:

“最大值”是一些粗心的措辞。

优先队列可以根据可能的任何排序方案返回元素(因为它们接受自定义比较器),但默认情况下,它们根据“自然顺序”返回元素。在 Java 中,较小的数字“先于”较大的数字。

您可以在 Oracle 文档中查看一些主要类(包括每个原语的包装器)的自然排序:https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html

【讨论】:

    猜你喜欢
    • 2020-08-20
    • 1970-01-01
    • 2013-02-13
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多