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メソッドが実行されてソートされます。
数値の場合は不等号で比較します。
関連の記事