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メソッドで比較・並び替えが行われます。したがって、取り出した結果は文字列の長さで昇順に並びます。

bannerAds