首页 > 解决方案 > Java中的优先队列堆

问题描述

我想了解 Java 语法中的优先级队列堆。

最小堆

PriorityQueue<String> heap = new PriorityQueue<String>(
                (w1, w2) -> count.get(w1).equals(count.get(w2)) ?
                w2.compareTo(w1) : count.get(w1) - count.get(w2) );

最大堆

PriorityQueue<String> heap = new PriorityQueue<String>(
                (w1, w2) -> count.get(w1).equals(count.get(w2)) ?
                w2.compareTo(w1) : count.get(w2) - count.get(w1) );

我看到两段代码之间的区别在于是否从 w2 中减去 w1,反之亦然。

例如,如果我有 (1,2)

最小堆:(1,2) -> 1 - 2 : -1

最大堆:(1,2) -> 2 -1 : 1

有人可以向我解释如何为每个值设置优先级值的基本级别,以 (w1, w2) 语法的含义开头,即它表示函数的参数,其中 w1 是树中预先存在的节点,并且w2 表示要添加到树中的新值,函数执行 w1 - w2 或 w2 - w1 以确定优先级值。

如果需要对问题进行任何澄清,请告诉我!

编辑:从下面的评论中,我现在了解到 (w1, w2) -> () 是一个 lambda 表达式。任何人现在都可以解释 lambda 表达式相对于 java 中的堆优先级队列的工作原理吗?如中, w1 是否表示队列中存在的值,而 w2 是否表示新值,以及如何设置优先级值

标签: javaheappriority-queue

解决方案


推荐阅读