ApexCodeのコレクション、List、Map、Setについて。

List

要素を順番に登録できる。
ソートのメソッドとか持ってる。
5次元までネストできる。
//OK
List<List<List<List<List<String>>>>> fiveLevel = new List<List<List<List<List<String>>>>>();
//エラー
List<List<List<List<List<List<String>>>>>> sixLevel = new List<List<List<List<List<List<String>>>>>>();
//Mapと組み合わせてもダメ。
List<List<List<List<List<Map<String, String>>>>>> sixLevel = new List<List<List<List<List<Map<String, String>>>>>>();
Nested type exceeds maximum level: 5
大括弧でインデックスを指定できるのは要素がプリミティブかSObjectのときだけらしい。

Map

一意なキーとそれに対応する値を登録できる。
ApexではMapがHashMap。
キーはプリミティブ型のみ。
値は5次元までネストできる。

Set

一意な値を登録できる。
ApexではSetがHashSet。
順番は持たない。
ネストはできない。



まぁ、何がいいたいがというと、
重複の除去にMapのキーだけ使ったり、
Setのループがたまたま昇順になるからってソートに使うのを
やめましょうね、と。


あとリファレンス読んで気付いたけど、
イテレーション対象のコレクションにaddとかremoveとかするとエラーになるんだ…。
Integer[] list1 = new Integer[]{1,2,3,4};
for (Integer i : list1) {
	list1.remove(0);
}
System.FinalException: Cannot modify a collection while it is being iterated
まあ、そりゃそうか。