重写collections.sort()

disho6za  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(326)

**结束。**此问题需要详细的调试信息。它目前不接受答案。
**想改进这个问题吗?**更新问题,使其成为堆栈溢出的主题。

上个月关门了。
改进这个问题
我正在实现kruskal的算法来寻找一个图的mst,我需要为第一步排序边。但是,我需要按权重对边进行排序,而不是按索引编号。我重写了compareto(),我的weightededge实现了comparable,所以我不知道为什么它继续按索引而不是按权重排序。有什么想法吗?

private final int v;
  private final int w;
  private int distance;
  private int price;
  /**
  * Create a directed edge from v to w with given weight.
  */
  public WeightedDirectedEdge(int v, int w, int distance, int price) {
    this.v = v;
    this.w = w;
    this.distance = distance;
    this.price = price;
  }

  public int from(){
    return v;
  }

  public int to(){
    return w;
  }

  public int distance(){
    return distance;
  }
  public int price(){
    return price;
  }
  @Override
  public int compareTo(WeightedDirectedEdge other)
  {
    Integer dist1 = new Integer(distance);
    Integer dist2 = new Integer(other.distance);
    return dist1.compareTo(dist2);
  }
}```
qgelzfjb

qgelzfjb1#

如果要按重量排序,则需要执行以下操作:

@Override
public int compareTo(WeightedDirectedEdge other){
    return Integer.compare(w, other.w);
}

而不是使用距离:

@Override
  public int compareTo(WeightedDirectedEdge other)
  {
    Integer dist1 = new Integer(distance);
    Integer dist2 = new Integer(other.distance);
    return dist1.compareTo(dist2);
  }

你不需要这样做 new Integer(distance); 这样你就可以使用 compareTo 只是使用 Integer.compare(..); 相反。

相关问题