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:四郎
主要メソッド
戻値型 | メソッド | 説明 |
---|---|---|
void | Collections.sort(List a, Comparator b) | リストaをbに従いソートする |
コレクションカテゴリ