我创建了一个Node类:
public class Node {
int vertex;
double latency;
Node predecessor;}
public double getLatency()
{
return latency;
}
我想创建一个优先级队列,按照从最小到最大的延迟对节点进行排序。经过研究,我相信我需要覆盖比较器?
PriorityQueue<Node> pqueue = new PriorityQueue<Node>(numVertices, new Comparator<Node>({
@Override
???
}
}
我不太确定如何覆盖它。
答案 0 :(得分:2)
您实际上只需要比较两种延迟。这意味着覆盖比较两个输入compare
的延迟的比较器类Node
的方法:
PriorityQueue<Node> pqueue = new PriorityQueue<Node>(numVertices, new Comparator<Node>({
@Override
public int compare(Node a, Node b) {
return Integer.compare(a.getLatency(), b.getLatency());
}
}
但是这仅适用于Java 7,对于其他版本:
new Integer(a.getLatency()).compareTo(new Integer(b.getLatency()));
如果您不想创建新的对象,请照常比较int
答案 1 :(得分:1)
“???”在您的示例中可以替换为以下内容:
public int compare(Node a, Node b) {
if (a.getLatency() < b.getLatency())
return -1;
else if (a.getLatency() > b.getLatency())
return 1;
return 0;
}