Java > Comparableでオブジェクトをソートする方法
更新日
2011-12-08
広告
Comparableインターフェースを利用して、オブジェクトを簡単にソートする方法を紹介します。
まず、ソートしたいクラスに Comparable インタフェースを実装します。 Comparableインターフェースは、compareToメソッドを持ちます。
例えば、人間を表す Human クラスを、年齢が若い順にソートしたいとします。 この場合、以下のようなサンプルになります。
public class Human implements Comparable<Human> { // 年齢 private final int age; // 体重 private final double weight; // コンストラクタ public Human(int age, double weight) { this.age = age; this.weight = weight; } public int getAge() { return this.age; } public double getWeight() { return this.weight; } @Override public int compareTo(Human otherHuman) { if (this.age < otherHuman.getAge()) { return -1; } else if (this.age >= otherHuman.getAge()) { return 1; } else { return 0; } } @Override public String toString() { return "(" + this.age + ", " + this.weight + ")"; } }
compareToでは、Humanオブジェクト同士を比較します。 そして、自オブジェクト(this)を前にソートしたければマイナスの値を返すようにします。 逆に、後ろにソートしたければプラスの値を返すようにします。 今回は、「年齢が若い順にソートしたい」ので、this.ageが小さい場合にマイナスの値を返します。
それでは、Humanオブジェクトをソートしてみます。 一郎、二郎、三郎の三兄弟を、年齢が若い順にソートします。
import java.util.*; public class ComparableTest { public static void main(String[] args) { Human ichiro = new Human(15, 50.8); // 一郎は15歳 Human jiro = new Human(13, 43.2); // 二郎は13歳 Human saburo = new Human(11, 40.7); // 三郎は11歳 System.out.println("Sort list"); List<Human> brothers = new ArrayList<Human>(); brothers.add(ichiro); brothers.add(jiro); brothers.add(saburo); // リストをソート Collections.sort(brothers); for (Human human : brothers) { System.out.println("(age, weight) = " + human); } System.out.println(""); System.out.println("Sort array"); Human[] brotherArray = new Human[3]; brotherArray[0] = jiro; brotherArray[1] = ichiro; brotherArray[2] = saburo; // 配列をソート Arrays.sort(brotherArray); for (Human human : brotherArray) { System.out.println("(age, weight) = " + human); } } }
このサンプルでは、リストをソートする処理と、配列をソートする処理を実装しています。 リストをソートする場合は Collections#sort メソッドを利用します。 配列をソートする場合は Arrays#sort メソッドを利用します。
ComparableTestを実行すると以下の結果になります。
Comparable$ java ComparableTest Sort list (age, weight) = (11, 40.7) (age, weight) = (13, 43.2) (age, weight) = (15, 50.8) Sort array (age, weight) = (11, 40.7) (age, weight) = (13, 43.2) (age, weight) = (15, 50.8)このように、年齢が若い順にソートされます。
広告
お問い合わせは sweng.tips@gmail.com まで。