8

ばかげているように聞こえるかもしれませんが、(キー、値) ペアのオブジェクトがあり、それらをキーに従って並べ替えると意味があります。私のポイントをコードで説明するには:

public class Pair implements Comparable<Pair> {
    private int value;
    private int key;

    public Pair(int key, int value) {
        this.key   = key;
        this.value = value;
    }

    @Override
    public int compareTo(Pair o) {
        if (this.key > o.key)
            return 1;
        else if (this.key < o.key)
            return -1;
        return 0;
    }
}

public class program {
    public static void main(String[] args) {
        PriorityQueue<Pair> queue = new PriorityQueue<Pair>;
        queue.add(new Pair(1,1));
        queue.add(new Pair(1,2));
        queue.add(new Pair(1,3));

        Pair pair = queue.poll(); // What would be in pair?
    }
}

には何がありpairますか?最初または最後に追加された要素? または、決定する可能性がないものはありますか?

4

2 に答える 2

8

PriorityQueue API は、この状況に対して約束をしません。

このキューの先頭は、指定された順序に関して最小の要素です。複数の要素が最小値で結合されている場合、ヘッドはそれらの要素の 1 つです。結合は任意に解除されます。キューの取得操作は、キューの先頭にある要素にポーリング、削除、ピーク、および要素アクセスします。

しかし、テストするのは簡単です。toString をペアに追加

@Override
public String toString() {
    return key + " " + value;
}

投票結果を印刷します

    Pair pair = queue.poll(); // What would be in pair?
    System.out.println(pair);

それは印刷します

1 1
于 2013-02-06T07:20:41.343 に答える
-4

基本的にQueueis firstInfirstOut データ構造です。

-ity で順序を定義しますPriorityQueuecomparable

あなたの場合と同様に、すべての優先度Pair()は同じです。したがって、順序に変更はありません。

先入れ先出し、つまりPairs (1,1) (1,2) (1,3)

ドキュメントによると

キューの取得操作は、キューの先頭にある要素にポーリング、削除、ピーク、および要素アクセスします。

于 2013-02-06T07:14:37.067 に答える