このページには、以下のサンプルを掲載しています。
下の項目をクリックをすると各サンプルにジャンプします。
※2週間以内の新着記事はNewアイコン、更新記事はUpアイコンが表示されます。
1. オブジェクトのソート(昇順)
オブジェクトのソートサンプルでは、2つのファイルを使用しています。
ソートを実行するクラスとソート対象となるデータオブジェクトのクラスです。
[ サンプルプログラムのソースコード - TestData.java - ]
ソート対象となるデータを保持するクラスです。
- public class TestData {
 
 
-   private String name;
 
-   private int age;
 
-   private int number;
 
 
-   public int getAge() {
 
-     return age;
 
-   }
 
-   public void setAge(int age) {
 
-     this.age = age;
 
-   }
 
-   public String getName() {
 
-     return name;
 
-   }
 
-   public void setName(String name) {
 
-     this.name = name;
 
-   }
 
-   public int getNumber() {
 
-     return number;
 
-   }
 
-   public void setNumber(int number) {
 
-     this.number = number;
 
-   }
 
-   
 
-   public String toString(){
 
-     return "番号:" + number + " " 
 
-        + "名前:" + name + " " + "年齢:" + age; 
 
-   }
 
- }
 
 
 | 
[ サンプルプログラムのソースコード - ObjectSort1.java - ]
昇順ソートを行うクラスです。
- import java.util.ArrayList;
 
- import java.util.Collections;
 
- import java.util.Comparator;
 
 
- public class ObjectSort1 {
 
 
-   public static void main(String[] args) {
 
-     ArrayList list = new ArrayList();
 
-     TestData td;
 
 
-     td = new TestData();
 
-     td.setNumber(1);
 
-     td.setName("Yamada");
 
-     td.setAge(18);
 
-     list.add(td);
 
-     
 
-     td = new TestData();
 
-     td.setNumber(2);
 
-     td.setName("Takagi");
 
-     td.setAge(36);
 
-     list.add(td);
 
-     
 
-     td = new TestData();
 
-     td.setNumber(3);
 
-     td.setName("Aoki");
 
-     td.setAge(23);
 
-     list.add(td);
 
-     
 
-     System.out.println("ソート前のデータ");
 
-     int i = 1;
 
-     for ( TestData data : list) {
 
-       
 
-       System.out.println("Data" + i++ + " -> " + data);
 
-       
 
-     }
 
 
-     Collections.sort(list, new Comparator<TestData>(){
 
-       public int compare(TestData t1, TestData t2) {
 
-         return t1.getAge() - t2.getAge();
 
-       }
 
-     });
 
 
-     System.out.println();
 
-     System.out.println("年齢順ソート");
 
-     i = 1;
 
-     for ( TestData data : list) {
 
-       
 
-       System.out.println("Data" + i++ + " -> " + data);
 
-       
 
-     }
 
-     
 
-     Collections.sort(list, new Comparator<TestData>(){
 
-       public int compare(TestData t1, TestData t2) {
 
-         return t1.getName().compareTo(t2.getName());
 
-       }
 
-     });
 
 
-     System.out.println();
 
-     System.out.println("名前順ソート");
 
-     i = 1;
 
-     for ( TestData data : list) {
 
-       
 
-       System.out.println("Data" + i++ + " -> " + data);
 
-       
 
-     }
 
-     
 
-   }
 
 
- }
 
 
 | 
[ サンプルプログラムの実行結果 ]
| 
 
ソート前のデータ 
Data1 -> 番号:1 名前:Yamada 年齢:18 
Data2 -> 番号:2 名前:Takagi 年齢:36 
Data3 -> 番号:3 名前:Aoki 年齢:23 
 
年齢順ソート 
Data1 -> 番号:1 名前:Yamada 年齢:18 
Data2 -> 番号:3 名前:Aoki 年齢:23 
Data3 -> 番号:2 名前:Takagi 年齢:36 
 
名前順ソート 
Data1 -> 番号:3 名前:Aoki 年齢:23 
Data2 -> 番号:2 名前:Takagi 年齢:36 
Data3 -> 番号:1 名前:Yamada 年齢:18 
 
 | 
[ サンプルプログラムの解説 ]
サンプルソースの赤字部分は、年齢順のソート処理をしています。青字部分は名前順のソート処理をしています。
Collectionクラスのsortメソッドの第2引数にcompareメソッドをオーバーライドしたComparatorオブジェクトを
指定します。
 
2. オブジェクトのソート(降順)
[ サンプルプログラムのソースコード - ObjectSort2.java - ]
ソート対象となるデータクラスは、
「オブジェクトのソート(昇順)」で使ったソースファイルを使います。
ソートを実行するクラスも下記赤字の部分を変更しただけです。
- import java.util.ArrayList;
 
- import java.util.Collections;
 
- import java.util.Comparator;
 
 
- public class ObjectSort2 {
 
 
-   public static void main(String[] args) {
 
-     ArrayList list = new ArrayList();
 
-     TestData td;
 
 
-     td = new TestData();
 
-     td.setNumber(1);
 
-     td.setName("Yamada");
 
-     td.setAge(18);
 
-     list.add(td);
 
-     
 
-     td = new TestData();
 
-     td.setNumber(2);
 
-     td.setName("Takagi");
 
-     td.setAge(36);
 
-     list.add(td);
 
-     
 
-     td = new TestData();
 
-     td.setNumber(3);
 
-     td.setName("Aoki");
 
-     td.setAge(23);
 
-     list.add(td);
 
-     
 
-     System.out.println("ソート前のデータ");
 
-     int i = 1;
 
-     for ( TestData data : list) {
 
-       
 
-       System.out.println("Data" + i++ + " -> " + data);
 
-       
 
-     }
 
 
-     Collections.sort(list, new Comparator<TestData>(){
 
-       public int compare(TestData t1, TestData t2) {
 
-         return t2.getAge() - t1.getAge();
 
-       }
 
-     });
 
 
-     System.out.println();
 
-     System.out.println("年齢順ソート");
 
-     i = 1;
 
-     for ( TestData data : list) {
 
-       
 
-       System.out.println("Data" + i++ + " -> " + data);
 
-       
 
-     }
 
-     
 
-     Collections.sort(list, new Comparator<TestData>(){
 
-       public int compare(TestData t1, TestData t2) {
 
-         return t2.getName().compareTo(t1.getName());
 
-       }
 
-     });
 
 
-     System.out.println();
 
-     System.out.println("名前順ソート");
 
-     i = 1;
 
-     for ( TestData data : list) {
 
-       
 
-       System.out.println("Data" + i++ + " -> " + data);
 
-       
 
-     }
 
-     
 
-   }
 
 
- }
 
 
 | 
[ サンプルプログラムの実行結果 ]
| 
 
ソート前のデータ 
Data1 -> 番号:1 名前:Yamada 年齢:18 
Data2 -> 番号:2 名前:Takagi 年齢:36 
Data3 -> 番号:3 名前:Aoki 年齢:23 
 
年齢順ソート 
Data1 -> 番号:2 名前:Takagi 年齢:36 
Data2 -> 番号:3 名前:Aoki 年齢:23 
Data3 -> 番号:1 名前:Yamada 年齢:18 
 
名前順ソート 
Data1 -> 番号:1 名前:Yamada 年齢:18 
Data2 -> 番号:2 名前:Takagi 年齢:36 
Data3 -> 番号:3 名前:Aoki 年齢:23 
 
 | 
[ サンプルプログラムの解説 ]
昇順ソートのサンプルから上記赤字部分のように変更すると降順ソートとなります。計算式の順番を前後逆にしただけです。
 
3. 複数項目のソート
[ サンプルプログラムのソースコード - TestData2.java - ]
まずソート対象となるデータクラスを記述します。
前述のデータクラスを流用して項目を追加します。
- public class TestData2 extends TestData {
 
 
-   private String name2;
 
-   
 
-   public String getName2() {
 
-     return name2;
 
-   }
 
 
-   public void setName2(String name2) {
 
-     this.name2 = name2;
 
-   }
 
 
-   public String toString(){
 
-     return "番号:" + getNumber() + " " + "名字:" + getName() + " "
 
-              + "名前:" + name2 + "年齢:" + getAge(); 
 
-   }
 
 
- }
 
 
 | 
[ サンプルプログラムのソースコード - ObjectSort3.java - ]
- import java.util.ArrayList;
 
- import java.util.Collections;
 
- import java.util.Comparator;
 
 
- public class ObjectSort3 {
 
 
-   public static void main(String[] args) {
 
-     ArrayList list = new ArrayList();
 
-     TestData2 td;
 
 
-     td = new TestData2();
 
-     td.setNumber(1);
 
-     td.setName("Yamada");
 
-     td.setName2("Goro");
 
-     td.setAge(23);
 
-     list.add(td);
 
-     
 
-     td = new TestData2();
 
-     td.setNumber(2);
 
-     td.setName("Yamada");
 
-     td.setName2("Taro");
 
-     td.setAge(18);
 
-     list.add(td);
 
-     
 
-     td = new TestData2();
 
-     td.setNumber(3);
 
-     td.setName("Takagi");
 
-     td.setName2("Miyo");
 
-     td.setAge(36);
 
-     list.add(td);
 
-     
 
-     td = new TestData2();
 
-     td.setNumber(4);
 
-     td.setName("Takagi");
 
-     td.setName2("Kayo");
 
-     td.setAge(36);
 
-     list.add(td);
 
-     
 
-     td = new TestData2();
 
-     td.setNumber(5);
 
-     td.setName("Aoki");
 
-     td.setName2("Ichiro");
 
-     td.setAge(23);
 
-     list.add(td);
 
-     
 
-     td = new TestData2();
 
-     td.setNumber(6);
 
-     td.setName("Yamada");
 
-     td.setName2("Ichiro");
 
-     td.setAge(23);
 
-     list.add(td);
 
-     
 
-     System.out.println("ソート前のデータ");
 
-     int i = 1;
 
-     for ( TestData data : list) {
 
-       
 
-       System.out.println("Data" + i++ + " -> " + data);
 
-       
 
-     }
 
-     
 
-     Collections.sort(list, new Comparator(){
 
-       public int compare(TestData2 t1, TestData2 t2) {
 
-         String t1str = String.format("$1%10s$2%10s", t1.getName(),t1.getName2());
 
-         String t2str = String.format("$1%10s$2%10s", t2.getName(),t2.getName2());
 
-         return t1str.compareTo(t2str);
 
-       }
 
-     });
 
 
-     System.out.println();
 
-     System.out.println("複合項目(名字+名前)のソート");
 
-     i = 1;
 
-     for ( TestData data : list) {
 
-       
 
-       System.out.println("Data" + i++ + " -> " + data);
 
-       
 
-     }
 
-     
 
-   }
 
 
- }
 
 
 | 
[ サンプルプログラムの実行結果 ]
| 
 
ソート前のデータ 
Data1 -> 番号:1 名字:Yamada 名前:Goro年齢:23 
Data2 -> 番号:2 名字:Yamada 名前:Taro年齢:18 
Data3 -> 番号:3 名字:Takagi 名前:Miyo年齢:36 
Data4 -> 番号:4 名字:Takagi 名前:Kayo年齢:36 
Data5 -> 番号:5 名字:Aoki 名前:Ichiro年齢:23 
Data6 -> 番号:6 名字:Yamada 名前:Ichiro年齢:23 
 
複合項目(名字+名前)のソート 
Data1 -> 番号:5 名字:Aoki 名前:Ichiro年齢:23 
Data2 -> 番号:4 名字:Takagi 名前:Kayo年齢:36 
Data3 -> 番号:3 名字:Takagi 名前:Miyo年齢:36 
Data4 -> 番号:1 名字:Yamada 名前:Goro年齢:23 
Data5 -> 番号:2 名字:Yamada 名前:Taro年齢:18 
Data6 -> 番号:6 名字:Yamada 名前:Ichiro年齢:23 
 
 | 
[ サンプルプログラムの解説 ]
このサンプルでは、名字と名前の項目を連結した上でcompareメソッドの計算式を実行しています。