- 2008年2月 8日 02:37
- プログラミング
ArrayListの中身をソートする方法を覚えたのでメモ。
もう忘れないぞー!
サンプルコードを以下に示します。
SortTest.java
mainメソッドを含むクラス。
Collecttionsクラスのsortメソッドに、ArrayListのオブジェクトと、ソートのルールを記述した無名インナークラスのオブジェクトを引数として渡しています。
引数として与えたArrayListのオブジェクトの中身が、メソッド終了時にはソートされた状態になっています。
sortメソッドは何も返さないので注意!
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class SortTest {
public static void main (String args[]) {
// ArrayListを作成
List<TestClass> list = new ArrayList<TestClass>();
// ArrayListに格納するオブジェクトを作成
TestClass tc1 = new TestClass();
TestClass tc2 = new TestClass();
TestClass tc3 = new TestClass();
TestClass tc4 = new TestClass();
// オブジェクトに名前をセット
tc1.setName("zzz");
tc2.setName("bbb");
tc3.setName("ppp");
tc4.setName("jjj");
// オブジェクトに値をセット
tc1.setValue(4);
tc2.setValue(6);
tc3.setValue(1);
tc4.setValue(3);
// オブジェクトをArrayListに格納
list.add(tc1);
list.add(tc2);
list.add(tc3);
list.add(tc4);
// ArrayListの内容を表示
System.out.println("----- 初期状態 -----");
for(TestClass tc : list) {
System.out.println("name: " + tc.getName() + " value: " + tc.getValue());
}
// nameの昇順でソート
Collections.sort(list, new Comparator<TestClass>() {
public int compare(TestClass tc1, TestClass tc2) {
String tc1Name = tc1.getName();
String tc2Name = tc2.getName();
if (tc1Name.compareTo(tc2Name) < 0) {
return -1;
} else if (tc1Name.compareTo(tc2Name) > 0) {
return 1;
}
return 0;
}
});
// ArrayListの内容を表示
System.out.println("\n----- nameでソート -----");
for(TestClass tc : list) {
System.out.println("name: " + tc.getName() + " value: " + tc.getValue());
}
// valueの昇順でソート
Collections.sort(list, new Comparator<TestClass>() {
public int compare(TestClass tc1, TestClass tc2) {
int tc1Value = tc1.getValue();
int tc2Value = tc2.getValue();
if (tc1Value < tc2Value) {
return -1;
} else if (tc1Value > tc2Value) {
return 1;
}
return 0;
}
});
// ArrayListの内容を表示
System.out.println("\n----- valueでソート -----");
for(TestClass tc : list) {
System.out.println("name: " + tc.getName() + " value: " + tc.getValue());
}
}
}
TestClass.java
ArrayListに格納するオブジェクトのクラス。
public class TestClass {
private String name;
private int value;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
実行結果
きちんとソートされているのがわかります。
----- 初期状態 ----- name: zzz value: 4 name: bbb value: 6 name: ppp value: 1 name: jjj value: 3 ----- nameでソート ----- name: bbb value: 6 name: jjj value: 3 name: ppp value: 1 name: zzz value: 4 ----- valueでソート ----- name: ppp value: 1 name: jjj value: 3 name: zzz value: 4 name: bbb value: 6
まとめ
無名インナークラスを使う事で、ソートのルールを記述する用のクラスを作成しなくてもよくなり。
手間が省けていい!
もっと上手い方法があればどなたか教えてください!
- Newer: 「論文の章立て」フレームワーク
- Older: 人に何かを教えるのってとても大変