Javaちょこっとリファレンス
HOME > Listの要素をソートする(独自クラス)

Listの要素をソートする(独自クラス)

Listの要素が独自作成クラスでそれをソートしたい場合があると思いますが、Javaではそうしたソートも簡単に行えるような仕組みが用意されています。

方法としては、データクラスとソートの条件を記述したComparatorサブクラスを用意して、Collections.sortにそれらを渡すとソートされます。サンプルは以下をご覧ください。

サンプルソースコード

ArrayListの要素(SyainClass)をソートするサンプル
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Collections;

public class ComparatorSortSample {

    public static void main(String args[]) {

        //ArrayListを生成する
        ArrayList<SyainClass> al = new ArrayList<SyainClass>();

        //Integer型の数値を追加する
        al.add(new SyainClass(1, "太郎"));
        al.add(new SyainClass(5, "次郎"));
        al.add(new SyainClass(3, "三郎"));
        al.add(new SyainClass(9, "四郎"));
        al.add(new SyainClass(7, "五郎"));

        //SyainComparatorクラスの条件に従いソートする
        Collections.sort(al, new SyainComparator());

        //結果を画面表示する
        Iterator<SyainClass> it = al.iterator();
        while (it.hasNext()) {
            SyainClass data = it.next();
            System.out.println(data.getSyainNo() + ":" + data.getSyainName());
        }

    }
}

データクラス(SyainClass)
public class SyainClass {

    private int syainNo;      //社員番号
    private String syainName;  //社員名

    //コンストラクタ
    public SyainClass(int syainNo, String syainName) {
        this.syainNo = syainNo;
        this.syainName = syainName;
    }

    //社員番号取得
    public int getSyainNo(){
        return this.syainNo;
    }

    //社員名取得
    public String getSyainName(){
        return this.syainName;
    }

}

Comparatorサブクラス(SyainClassのソート条件を記述したクラス)
import java.util.Comparator;

public class SyainComparator implements Comparator<SyainClass> {

    //比較メソッド(データクラスを比較して-1, 0, 1を返すように記述する)
    public int compare(SyainClass a, SyainClass b) {
        int no1 = a.getSyainNo();
        int no2 = b.getSyainNo();

        //こうすると社員番号の昇順でソートされる
        if (no1 > no2) {
            return 1;

        } else if (no1 == no2) {
            return 0;

        } else {
            return -1;

        }
    }

}

実行結果
C:\>java ComparatorSortSample 1:太郎 3:三郎 5:次郎 7:五郎 9:四郎

主要メソッド

【java.util.Collectionsクラスのソートに関する主要メソッド】
戻値型メソッド説明
voidCollections.sort(List a, Comparator b)リストaをbに従いソートする
このエントリーをはてなブックマークに追加

コレクションカテゴリ

HOMEへ戻る TOPへ戻る