2

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

            ???
        }
    }

オーバーライドする方法がよくわかりません。

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 に答える