Java の Comparator は一つ、 Comparable は三つの関数を実装2025年01月15日 14時05分10秒

Java の SortedSet に Comparator を渡して、特定の Set だけでの比較関数を定義できる。Comparator を使わなくても、Comparable インターフェースを implemente し int compareTo() 関数を実装する事も出来る。こちらは、複数の Set でも共有できる。

Comparator の使い方は How to define comparator on SortedSet like TreeSet? から抜粋。

基本の形はこちら。

    Set myStrings = new TreeSet<>(new Comparator() {
        @Override
        public int compare(String o1, String o2) {
            // Define comparing logic here
            return o1.compareTo(o2);
        }
    });
Java 8 からのラムダを使うと少し簡潔に書ける。
Set myStrings = new TreeSet<>((o1, o2) -> o1.compareTo(o2));

Comparable インターフェース を実装するには public int compareTo(T) を実装すればいい。しかし、compareTo() を実装すると副作用的に、hashCode()equals() の実装も必要になってくるので、実質的には三つの関数を独自実装する事になる。