首页 > 解决方案 > PriorityQueue 类的标准行为是什么?

问题描述

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

所以我认为如果我使用优先级队列会很有帮助,为此我需要让我的边缘实现 Comparable<> 接口,所以我做到了,但我不知道优先级队列认为什么是最高优先级,会不会是最重还是最轻的边缘?而且,优先级队列会添加两次相同的对象,还是会表现为 Set ?

这是我的代码:

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

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

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

标签: javapriority-queue

解决方案


优先级队列使用所谓的对象自然排序。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
}

推荐阅读