java - PriorityQueue 类的标准行为是什么?
问题描述
所以我正在尝试构建我的第一个 prim 算法,为此我正在按优先级对边缘进行排序,因为它的权重。
所以我认为如果我使用优先级队列会很有帮助,为此我需要让我的边缘实现 Comparable<> 接口,所以我做到了,但我不知道优先级队列认为什么是最高优先级,会不会是最重还是最轻的边缘?而且,优先级队列会添加两次相同的对象,还是会表现为 Set ?
这是我的代码:
Public class Edge implements Comparable<Edge> {
int weight;
public int compareTo(Edge e) {
return e.getWeight() - this.weight;
}
}
我希望将最轻的边缘作为最高优先级。值得注意的是,这是我第一次实现优先队列和可比较的
解决方案
优先级队列使用所谓的对象自然排序。compareTo() 方法需要返回一个 -1, 0 1。具有最高优先级的对象将始终位于队列的前面。
我也会改变你的 compareTo 实现,就像这样操作。
public int compareTo(Edge e)
{
if( e.getWeight() > this.weight )
return 1;
else if( e.getWeight() == this.weight )
return 0;
else //e.getWeight() < this.weight
return -1
}
推荐阅读
- python - 如何绕过网络导致的 SMTP 超时?
- react-native - 使用 react-native 动画 api 与原点进行 react-native-svg 旋转的等价物是什么
- angular - 具有不同路由器插座的多个子组件的问题
- scala - 从宏中的 HList 获取类型序列
- c# - 比较 2 个大字符串列表
- html - 恢复页面时 Html / CSS 网页内容混合
- jquery - 如何从jquery中的点击事件函数中读取变量
- swiftui - 在 SwiftUI 中打开暗模式时更改背景颜色
- git - 尝试将我的 VS Code 与不同的 GitHub 存储库链接
- pdf - 在 python 3.7 中处理 .txt 文件时如何计算 tf-idf?