2

int をプライオリティキューにプッシュしたいのですが、できません! queue.add() コードを使用しましたが、このコードはソートされたキューを返します。助けてください、ありがとう!

4

3 に答える 3

2

スタック抽象データ型のpush/pop操作は明確に定義されています。キュー (または優先キュー) にとって意味があるかどうかはわかりません。

PriorityQueueimplementsQueueのみを指定しますadd/remove。一方、 a Dequehas addFirst/LastremoveFirst/Lastなど。おそらくこれらの 1 つが探しているものです。


長さを比較するカスタムを使用して、 PriorityQueueofを使用する例を次に示します。StringComparator

    Queue<String> queue = new PriorityQueue<String>(
        100, new Comparator<String>() {
            @Override public int compare(String s1, String s2) {
                return Integer.valueOf(s1.length()).compareTo(s2.length());
            }
        }
    );
    queue.add("Sally");
    queue.add("Amy");
    queue.add("Alice");

    System.out.println(queue);
    // "[Amy, Sally, Alice]"

    System.out.println(queue.remove());
    // "Amy"

    System.out.println(queue.remove());
    // "Alice"

    queue.add("Tina");
    System.out.println(queue.remove());
    // "Tina"

予想どおり、 はでキュー内PriorityQueueの最短を示します。また、指定されているように、同点は任意に解除されます。Stringremove

関連する質問

の上PriorityQueue

オンComparatorComparable

于 2010-06-20T09:55:10.050 に答える
0

一部の int をプライオリティキューにプッシュしたい

「プッシュ」はスタック操作であり、キュー操作ではありません。

しかし、私はできません!queue.add() コードを使用しましたが、このコードはソートされたキューを返します

いいえ、そうではありません。PriorityQueue は、キューの先頭を削除する目的でのみソートされます。

あなたの質問はあまり意味がありません。プッシュしたい場合は、スタックを使用してください。PriorityQueue の機能が必要ない場合は、使用しないでください。

あなたの実際の問題は正確には何ですか?

于 2010-06-20T10:12:05.157 に答える
0

プライオリティ キューの要点は、最小のエントリ (または、並べ替えられたリストに表示される最初の要素) を最初に返すことです。それがあなたの望むものでないなら、あなたはおそらくまっすぐな PriorityQueue を望まないでしょう。

あなたができることは、通常のもののための PriorityQueue と「緊急事態」のためのスタックを持つクラスを作成することです。スタックにアイテムを追加する push(T) メソッドと、キューに追加する add(T) メソッドを用意します。次の要素を取得するメソッドは、そこに何かがある場合はスタックから削除する必要があります。そうでない場合は、キューの次の要素を取得します。

于 2010-06-20T10:13:34.597 に答える