Javaコレクション #02 java.util.Collections

 Java
2013.08.07

Java Collections Framework 紹介コーナー、第二回はCollectionsクラス。

 

 

Random euro coin collection IX] Random euro coin collection IX / tillwe

 

Java Doc: Collections (Java Platform SE 6)

 

Collectionsといえば、sortですよね。
Data Transfer Object (DTO: なんらかのデータを表現しているクラス)のリストを
ソートするときとか。

public class Fruit {
	Fruit(String name, String placeOfOrigin) {
		this.name = name;
		this.placeOfOrigin = placeOfOrigin;
	}
	String name;
	String placeOfOrigin;
}

というクラスなら

List<Fruit> fruits = Arrays.asList(
	new Fruit("cherry", "Turkey"),
	new Fruit("mango", "India")
);
Collections.sort(fruits, new Comparator<Fruit>() {
	@Override
	public int compare(Fruit fruit1, Fruit fruit2) {
		return fruit1.name.compareTo(fruit2.name);
	}
});

ですね。
(ソートなら、DTO側にComparable実装して Collections.sort(fruits)でもいいんですが
 privateフィールド使いたいとき以外は可読性・柔軟性の面からこちらのほうがいい派)

 

 

最大値・最小値探すなら同じような用法で、Collections.max() / Collections.min()も便利。

 

他にCollectionsで使えるのは、emptyList、emptyMap、emptySet。
いずれもimmutableなので実行時例外には注意ですが、nullを返すよりはアリな時も多いはず。

List<Fruit> find(String placeOfOrigin) {
	if (placeOfOrigin == null) return Collections.emptyList();
	List<Fruit> fruits = new ArrayList<Fruit>();
	// TODO connect to database & fetch to list

	return fruits;
}

 

最後に、スレッドセーフなコレクションを作りたいとき。例えば、

List<Fruit> synchronizedFruits = Collections.synchronizedList(new ArrayList<Fruit>());

 

Collections、いい。