java - 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 是否表示新值,以及如何设置优先级值
解决方案
推荐阅读
- javascript - 以角度转换数组对象
- django - 如何更新文件字段django
- google-app-engine - 使用 Google Cloud App Engine 阻止基于 UserAgent 的请求
- python - 如何在 Python 的 Data Gathering 中显示不同的标题?
- gradle - gradle“包不存在”
- r - R十进制逗号而不是ggplot scales::percent中的小数点
- c# - CefSharp如何像真正的浏览器C#一样清除当前的chrome web浏览器控制内容
- python - 在 python 类中返回数据帧的最佳实践
- python - 重塑以字典为值的熊猫数据框
- sql-server - 重新停靠选项卡时 SSMS 18.8 崩溃