java - 覆盖 Collections.sort()
问题描述
我正在实现 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);
}
}```
解决方案
如果您想按重量排序,则需要执行以下操作:
@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
just useInteger.compare(..);
代替。
推荐阅读
- angular - 单击按钮时,引导下拉菜单不起作用
- assembly - MASM 的有符号和无符号指令
- flutter - 我可以将一个 onpressed 从一个单独的 dart 文件中传递到一个 CupertinoDialog 中吗
- php - DocuSign:PARTNER_AUTHENTICATION_FAILED 指定的集成商密钥未找到或被禁用。为用户指定的帐户无效
- r - 编织到 HTML 时找不到本地函数
- python - 从 FlashScore.ro 实时抓取信息
- javascript - 渲染动画页面然后使用 Node.js 重定向到主页
- xquery - 如何编写从命令行传递输入文件的查询(Saxon)
- javascript - 测试具有多个 if/else 块的函数在 javascript 中是否返回 true 或 false
- oracle - 如何创建用户表?