2

我创建了一个节点类:

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

            ???
        }
    }

我不太确定如何覆盖它。

4

2 回答 2

2

您实际上只需要比较两种延迟。这意味着覆盖compare比较两个输入的延迟类 Comparator的方法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照常比较两者

于 2013-03-26T22:48:53.780 回答
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;
}
于 2013-03-26T22:17:29.220 回答