【发布时间】:2018-10-13 17:27:29
【问题描述】:
我正在向 PriorityQueue 添加边,但由于某种原因,它们没有按其值排序,导致稍后出现错误结果。
我的边缘类看起来像这样
class Edge implements Comparable<Edge>{
int value;
String dest;
String start;
public Edge(String start, String dest, int g) {
this.dest = dest;
value = g;
this.start = start;
}
@Override
public int compareTo(Edge o) {
int temp = value - o.value;
if (temp > 0) {
return 1;
}
if (temp < 0) {
return -1;
}
return 0;
}
然而,当我运行我的代码时,我在属于节点“Springfield,MO”的 LinkedList 上执行 addAll 到 PriorityQueue 时,边按错误的顺序排序,如下所示,有什么问题?
queue.addAll(list.get(node));
我尝试为 Edge 创建一个特定的比较器类并将其用作 PriorityQueue 中的参数,但我仍然得到相同的结果。
【问题讨论】:
-
为什么要做减法?为什么不只是
Integer.compare(value, o.value);? -
鉴于您的比较器定义,我认为它工作得很好......
-
@Neijwiert 你是对的,但是这给出了相同的结果。
-
@HBo 但是,如果它的值较低,为什么在 PriorityQueue 中塞米诺尔不在文森斯之上?
-
由于您尝试了@Neijwiert 的解决方案但没有成功,我想您应该尝试使用给定的答案
标签: java linked-list comparator priority-queue