int をプライオリティキューにプッシュしたいのですが、できません! queue.add() コードを使用しましたが、このコードはソートされたキューを返します。助けてください、ありがとう!
3 に答える
スタック抽象データ型のpush/pop
操作は明確に定義されています。キュー (または優先キュー) にとって意味があるかどうかはわかりません。
PriorityQueue
implements
Queue
のみを指定しますadd/remove
。一方、 a Deque
has addFirst/Last
、removeFirst/Last
など。おそらくこれらの 1 つが探しているものです。
例
長さを比較するカスタムを使用して、 PriorityQueue
ofを使用する例を次に示します。String
Comparator
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
の最短を示します。また、指定されているように、同点は任意に解除されます。String
remove
関連する質問
の上PriorityQueue
オンComparator
とComparable
一部の int をプライオリティキューにプッシュしたい
「プッシュ」はスタック操作であり、キュー操作ではありません。
しかし、私はできません!queue.add() コードを使用しましたが、このコードはソートされたキューを返します
いいえ、そうではありません。PriorityQueue は、キューの先頭を削除する目的でのみソートされます。
あなたの質問はあまり意味がありません。プッシュしたい場合は、スタックを使用してください。PriorityQueue の機能が必要ない場合は、使用しないでください。
あなたの実際の問題は正確には何ですか?
プライオリティ キューの要点は、最小のエントリ (または、並べ替えられたリストに表示される最初の要素) を最初に返すことです。それがあなたの望むものでないなら、あなたはおそらくまっすぐな PriorityQueue を望まないでしょう。
あなたができることは、通常のもののための PriorityQueue と「緊急事態」のためのスタックを持つクラスを作成することです。スタックにアイテムを追加する push(T) メソッドと、キューに追加する add(T) メソッドを用意します。次の要素を取得するメソッドは、そこに何かがある場合はスタックから削除する必要があります。そうでない場合は、キューの次の要素を取得します。