JavaのPriorityQueueでカスタムソートを実装するには?
PriorityQueueのコンストラクタに渡すComparatorオブジェクトを実装すれば、Javaではカスタムソートができます。
文字列の長さでソートするサンプルコード:
import java.util.Comparator;
import java.util.PriorityQueue;
public class Main {
public static void main(String[] args) {
PriorityQueue<String> queue = new PriorityQueue<>(new StringLengthComparator());
queue.add("Java");
queue.add("Python");
queue.add("C++");
queue.add("Ruby");
while (!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
static class StringLengthComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return Integer.compare(s1.length(), s2.length());
}
}
}
ネイティブ日本語での言い換え:
C++
Java
Ruby
Python
この例では、StringLengthComparatorオブジェクトを渡すPriorityQueueオブジェクトを作成しました。StringLengthComparatorはComparatorインタフェースを実装し、compareメソッドをオーバーライドしてカスタムの並べ替えロジックを定義し、文字列の長さを比較します。
PriorityQueueでは、要素を取り出すたびにComparatorのcompareメソッドで比較・並び替えが行われます。したがって、取り出した結果は文字列の長さで昇順に並びます。