PriorityQueue の使い方は? 質問する

PriorityQueue の使い方は? 質問する

どうすればPriorityQueue何を基準に並べ替えたいのですか?

また、offerそしてadd方法は?

ベストアンサー1

を受け取り、ソート順に適した方法で比較するコンパレータを渡すコンストラクター オーバーロードを使用しますComparator<? super E> comparator。ソート方法の例を示していただければ、確信が持てない場合にコンパレータを実装するためのサンプル コードを提供できます。(ただし、かなり簡単です。)

他のところでも述べられているように、offerと はadd単に異なるインターフェース メソッドの実装です。私が入手した JDK ソースでは、addは を呼び出しますoffer。はサイズ制限により値を追加できないことを示すことができるため、 とaddは一般に動作が異なる可能性offerありますが、 が無制限である場合、この違いは無関係です。offerPriorityQueue

文字列の長さでソートする優先キューの例を次に示します。

// Test.java
import java.util.Comparator;
import java.util.PriorityQueue;

public class Test {
    public static void main(String[] args) {
        Comparator<String> comparator = new StringLengthComparator();
        PriorityQueue<String> queue = new PriorityQueue<String>(10, comparator);
        queue.add("short");
        queue.add("very long indeed");
        queue.add("medium");
        while (queue.size() != 0) {
            System.out.println(queue.remove());
        }
    }
}

// StringLengthComparator.java
import java.util.Comparator;

public class StringLengthComparator implements Comparator<String> {
    @Override
    public int compare(String x, String y) {
        // Assume neither string is null. Real code should
        // probably be more robust
        // You could also just return x.length() - y.length(),
        // which would be more efficient.
        if (x.length() < y.length()) {
            return -1;
        }
        if (x.length() > y.length()) {
            return 1;
        }
        return 0;
    }
}

出力は次のとおりです。

短い

中くらい

本当に長い

おすすめ記事