java - PriorityQueue 类的标准行为是什么?

标签 java priority-queue

所以我正在尝试构建我的第一个 prim 算法,为此我根据其权重按优先级对边缘进行排序。

所以我认为如果我使用优先级队列会很有帮助,为此我需要让我的边缘实现 Comparable<> 接口(interface),所以我这样做了,但我不知道优先级队列认为什么是最高优先级,会吗 是最重的边缘还是最轻的边缘?另外,优先级队列会添加同一个对象两次,还是会表现得像一个集合?

这是我的代码:

Public class Edge implements Comparable<Edge> {
   int weight;

   public int compareTo(Edge e) {
      return e.getWeight() - this.weight;
   }
}

我希望将最轻的边缘作为最高优先级。 值得注意的是,这是我第一次实现优先级队列并且可比较

最佳答案

优先级队列使用所谓的对象自然排序。 The compareTo() method needs to return a -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
}

关于java - PriorityQueue 类的标准行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58495590/

相关文章:

java - 将整数数据加密到数据库中

Java从字符串中解析带时区的日期

c++ - 高级优先队列

javascript - 堆如何知道按什么排序?

c++ - "class prototypes"在 C++ 中可能吗?

c++ - 优先级队列和 vector 中相同比较器的顺序差异

java - 将带参数的 XSLT 文件转换为另一个 XSLT 文件

java - 将目录添加到 java.library.path 后 System.loadLibrary() 出现 UnsatisfiedLinkError

java - 优先级队列比较——Java 与 C++

java - JodaTime 第一次调用时非常慢