どうすればPriorityQueue
何を基準に並べ替えたいのですか?
ベストアンサー1
を受け取り、ソート順に適した方法で比較するコンパレータを渡すコンストラクター オーバーロードを使用しますComparator<? super E> comparator
。ソート方法の例を示していただければ、確信が持てない場合にコンパレータを実装するためのサンプル コードを提供できます。(ただし、かなり簡単です。)
他のところでも述べられているように、offer
と はadd
単に異なるインターフェース メソッドの実装です。私が入手した JDK ソースでは、add
は を呼び出しますoffer
。はサイズ制限により値を追加できないことを示すことができるため、 とadd
は一般に動作が異なる可能性がoffer
ありますが、 が無制限である場合、この違いは無関係です。offer
PriorityQueue
文字列の長さでソートする優先キューの例を次に示します。
// 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;
}
}
出力は次のとおりです。
短い
中くらい
本当に長い