ホームページ > Java > &#&チュートリアル > Java PriorityQueue でカスタム並べ替えを実現するにはどうすればよいですか?

Java PriorityQueue でカスタム並べ替えを実現するにはどうすればよいですか?

DDD
リリース: 2024-12-22 21:32:25
オリジナル
738 人が閲覧しました

How Can I Achieve Custom Sorting in a Java PriorityQueue?

PriorityQueue のカスタム並べ替え順序

PriorityQueue (Java コレクション クラス) は、要素の順序に基づいて要素を昇順に並べ替えるデフォルトの並べ替えメカニズムを提供します。自然な順序付け。ただし、この並べ替え動作をカスタマイズし、特定の基準で並べ替えることは可能です。

PriorityQueue を希望通りに並べ替える

PriorityQueue でカスタム並べ替えを実現するには、コンストラクターを使用します。 Comparator を受け取るオーバーロードスーパーE>コンパレータを引数として指定します。コンパレータは要素を比較し、その順序を決定します。たとえば、長さに基づいて文字列を昇順に並べ替えます。

Comparator<String> comparator = (x, y) -> x.length() - y.length();
PriorityQueue<String> queue = new PriorityQueue<>(comparator);
ログイン後にコピー

Offer メソッドと Add メソッド

PriorityQueue には、要素を追加するための 2 つのメソッドが用意されています。 ) と add()。機能的には似ていますが、微妙な違いがあります。 Offer() は、要素が正常に追加された場合は true を返し、キューがいっぱいの場合は false を返します。対照的に、add() は要素をキューに直接追加し、キューがいっぱいの場合は IllegalStateException をスローします。

制限のない PriorityQueue の場合、両方のメソッドは同等です。ただし、制限付き優先キューでは、要素をキューに入れる前に、offer() を使用して要素を追加できるかどうかを確認できます。

例: 文字列長の並べ替え

文字列に基づいて文字列を並べ替える PriorityQueue を作成する次の例を考えてみましょう。 length:

public class StringLengthComparator implements Comparator<String> {
    @Override
    public int compare(String x, String y) {
        return x.length() - y.length();
    }
}

public class PriorityTest {
    public static void main(String[] args) {
        PriorityQueue<String> queue = new PriorityQueue<>(new StringLengthComparator());
        queue.offer("medium");
        queue.offer("short");
        queue.offer("very long indeed");

        while (!queue.isEmpty()) {
            System.out.println(queue.poll());
        }
    }
}
ログイン後にコピー

出力:

short
medium
very long indeed
ログイン後にコピー

この例では、カスタム コンパレーターを定義し、PriorityQueue コンストラクターを使用して文字列の長さに基づいて並べ替えを行う方法を示します。

以上がJava PriorityQueue でカスタム並べ替えを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート