Listなどのコレクション・クラスをソートする場合、java.util.Collectionsクラスのsort()メソッドを利用すると便利である(配列の場合java.util.Arraysを使用)。
例えばAnimalというクラスのリストをソートする場合、以下のようなコードになる*1。
import java.util.Collections; public class Animal { public String name; public int age; } public class DataComparator implements Comparator public int compare(Object o1, Object o2) { int age1 = ((Animal)o1).age; int age2 = ((Animal)o2).age; return age1 - age2; } } List animalList = getAnimalList(); Collections.sort(animalList, new DataComparator);
しかし、上記のコードをJDK5以降でコンパイルすると、「無検査呼び出し」というような警告が出る。この警告が出ないようにするには、Genericsを利用して以下のように記述すると良い*2 *3
import java.util.Collections; public class Animal { public String name; public int age; } public class DataComparator implements Comparator<Animal> { public int compare(Animal o1, Animal o2) { int age1 = o1.age; int age2 = o2.age; return age1 - age2; } } List<Animal> animalList = getAnimalList(); Collections.sort(animalList, new DataComparator);
参照:
nextindex.net
人材開発室: sort
J2SE 5.0 Tiger 虎の穴 Generics
*1:DataComparatorクラスを作成する代わりに、AnimalクラスでComparableインタフェースをimplementsしてもよい。Animalクラスの修正が可能であれば、Comparableインタフェースを利用し、修正出来ない場合にはComparatorインタフェースを利用するという使い分けになると思われる
*2:Genericsについては「http://tyche.pu-toyama.ac.jp/~ko-ji/now-java/GenBox.html」が参考になります。
*3:警告が出る理由については「サポートページ:ひとりでできる Java 実践入門:|技術評論社」に分かりやすく書かれている。