Java オブジェクトをソートする(Comparable)

JavaのComparableインターフェースでオブジェクトをソートするサンプルです。

目次

サンプル Comparableインターフェース
  文字列をソートする
  数値をソートする

Comparableインターフェース

public interface Comparable<T>
  • ソートするクラスにComparableインターフェースを実装します。
  • compareToメソッドをオーバーライドしてロジックを記述します。
  • 文字列は、comparetoメソッドで比較します。
  • 数値は、不等号で比較します。
  • OracleのJavaのComparableインタフェースのリンクです。
    https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Comparable.html

文字列をソートする

文字列をソートするサンプルです。

package test1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test1  {
	public static void main(String[] args) {
		Class1 c1 = new Class1("あ");
		Class1 c2 = new Class1("い");
		Class1 c3 = new Class1("う");
		List<Class1> Class1 = new ArrayList<>();
		Class1.add(c2);
		Class1.add(c3);
		Class1.add(c1);
		
		Collections.sort(Class1);
		
        for (Class1 a : Class1) {
            System.out.println(a.name);//あ い う 
        }
 	}
}
class Class1 implements Comparable<Class1>{
	String name;
	Class1(String a){
		this.name = a;
	}
	@Override
	public int compareTo(Class1 o) {
		if(this.name.compareTo(o.name)<0) {
			return -1;
		}
		if(this.name.compareTo(o.name)>0) {
			return 1;
		}
		return 0;
	}
}

23行目からが作成したクラスです。
25行目はコンストラクタで24行目の変数に値をセットします。
29行目は、compareToメソッドをオーバーライドしています。

8~10行目で23行目のクラスをインスタンス化しています。
11行目からは、リストを作成して生成したオブジェクトをセットしています。
16行目は、Collectionsクラスのsortメソッドでソートしています。
このとき、29行目のオーバーライドされたcompareToメソッドが実行されてソートされます。
29行目のメソッドがないまたは、30行目からのロジックがない場合はソートされません。

数値をソートする

数値をソートするサンプルです。

package test1;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Test1  {
	public static void main(String[] args) {
		Class1 c1 = new Class1(1);
		Class1 c2 = new Class1(2);
		Class1 c3 = new Class1(3);
		List<Class1> Class1 = new ArrayList<>();
		Class1.add(c2);
		Class1.add(c3);
		Class1.add(c1);
		
		Collections.sort(Class1);
		
        for (Class1 a : Class1) {
            System.out.println(a.num);//あ い う 
        }
 	}
}
class Class1 implements Comparable<Class1>{
	int  num;
	Class1(int a){
		this.num = a;
	}
	@Override
	public int compareTo(Class1 o) {
		if(this.num < o.num) {
			return -1;
		}
		if(this.num > o.num) {
			return 1;
		}
		return 0;
	}
}

23行目からが作成したクラスです。
8~10行目でそのクラスをインスタンス化しています。
引数には数値をセットしています。
11行目からは、リストを作成して生成したオブジェクトをセットしています。
16行目は、Collectionsクラスのsortメソッドでソートしています。
このとき、29行目のオーバーライドされたcompareToメソッドが実行されてソートされます。
数値の場合は不等号で比較します。

関連の記事

Java cloneメソッドでコピーするサンプル

△上に戻る