ComparableとComparator
カスタムソートに使うComparableとComparatorの違いを学びます。compareToと外部Comparatorを練習します。
「ComparableとComparator」はCoddyKit上の無料Java Academyレッスンです。 これはレッスン2/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJava Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Java Academyコースには全3レッスンが含まれています。
導入
並べ替えにはルールが必要です。ComparableとComparatorは、ルールを定義する2つの方法です:
- Comparable:クラスが compareTo を実装します。
- Comparator:sort() に渡す独立したオブジェクトです。
Comparableの概念
Comparableを使うと、クラスに自然順序を定義できます。compareToを実装すると、Collections.sort が要素の並べ方を認識できます。
コード:Comparable
ここではPersonが Comparable を実装し、年齢で並べ替えています。これが自然順序を定義します。
public class Main {
static class Person implements Comparable<Person> {
String name;
int age;
Person(String n, int a) { name = n; age = a; }
public int compareTo(Person o) {
return this.age - o.age; // order by age
}
public String toString() { return name + "(" + age + ")"; }
}
public static void main(String[] args) {
java.util.List<Person> list = new java.util.ArrayList<>();
list.add(new Person("Ada",30));
list.add(new Person("Bob",25));
java.util.Collections.sort(list);
System.out.println(list); // [Bob(25), Ada(30)]
}
}
Comparatorの概念
Comparatorは外部のオブジェクトです。同じクラスを、年齢ではなく名前で並べるなど、異なる方法で並べ替えられます。
コード:Comparator
この Comparator はnameで並べ替えます。異なる Comparator を同じクラスで再利用できます。
public class Main {
static class Person {
String name; int age;
Person(String n,int a){ name=n; age=a; }
public String toString(){ return name+"("+age+")"; }
}
public static void main(String[] args) {
java.util.List<Person> list = new java.util.ArrayList<>();
list.add(new Person("Ada",30));
list.add(new Person("Bob",25));
java.util.Comparator<Person> byName = (p1,p2) -> p1.name.compareTo(p2.name);
java.util.Collections.sort(list, byName);
System.out.println(list); // [Ada(30), Bob(25)]
}
}
コード:逆順Comparator
Comparatorでは、ここで示す降順のように、任意のルールを定義できます。
public class Main {
public static void main(String[] args) {
java.util.List<Integer> nums = new java.util.ArrayList<>();
nums.add(5); nums.add(1); nums.add(3);
java.util.Comparator<Integer> desc = (a,b) -> b - a;
java.util.Collections.sort(nums, desc);
System.out.println(nums); // [5,3,1]
}
}
ComparableとComparatorのチェック
クイックチェック:Comparable と Comparator の主な違いは何ですか?
まとめ
まとめ:Comparable はクラス内部で自然順序を定義します。Comparator は独立しており、さまざまな並べ替え戦略を作成できます。
よくある質問
「ComparableとComparator」レッスンは無料ですか?
はい。「ComparableとComparator」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Java Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Java Academyコースには全3レッスンが含まれています。
「ComparableとComparator」で何を学びますか?
カスタムソートに使うComparableとComparatorの違いを学びます。compareToと外部Comparatorを練習します。 ブラウザで直接実行するハンズオンコードでJava Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Java Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJava Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/3です。
「ComparableとComparator」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJava Academyレッスンでコードを書いて実行できますか?
はい。すべてのJava Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Mapと頻度カウント
- ComparableとComparator
- Collectionsによるソートと検索