-
Comparableインターフェースを実装する方法:
- ソートしたいクラスにComparableインターフェースを実装します。
- ComparableインターフェースのcompareToメソッドをオーバーライドし、要素の比較ロジックを実装します。
- コレクションをソートする際に、Collections.sortメソッドを使用します。
以下は、Personクラスを名前のアルファベット順にソートする例です:
import java.util.ArrayList; import java.util.Collections; public class Person implements Comparable<Person> { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } @Override public int compareTo(Person person) { return this.getName().compareTo(person.getName()); } public static void main(String[] args) { ArrayList<Person> people = new ArrayList<>(); people.add(new Person("Alice")); people.add(new Person("Bob")); people.add(new Person("Charlie")); Collections.sort(people); for (Person person : people) { System.out.println(person.getName()); } } }
出力結果:
Alice Bob Charlie
-
Comparatorインターフェースを使用する方法:
- ソートしたいクラスにComparatorインターフェースを実装しない場合や既存の比較ロジックをオーバーライドしたくない場合、Comparatorを使用することができます。
- Comparatorインターフェースのcompareメソッドを実装し、要素の比較ロジックを提供します。
- コレクションをソートする際に、Collections.sortメソッドの引数としてComparatorオブジェクトを渡します。
以下は、Personクラスを年齢の昇順にソートする例です:
import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; public class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public static void main(String[] args) { ArrayList<Person> people = new ArrayList<>(); people.add(new Person("Alice", 25)); people.add(new Person("Bob", 30)); people.add(new Person("Charlie", 20)); Collections.sort(people, new Comparator<Person>() { @Override public int compare(Person person1, Person person2) { return Integer.compare(person1.getAge(), person2.getAge()); } }); for (Person person : people) { System.out.println(person.getName()); } } }
出力結果:
Charlie Alice Bob
これらの方法を使用することで、Javaでコンパレータを使ってコレクションをソートすることができます。適切なインターフェースを実装するか、Comparatorオブジェクトを作成することで、要素のソート順をカスタマイズすることができます。