#初めに
JavaでListの要素を初期化・追加を設定したい場合のイディオムを幾つか紹介して、
行き着いたものを紹介します。
環境
java version "1.8.0_25"です。
#初期化
asListを使う
検索するとよくでてくる方法がasListを使う方法です。
1行で書けて、要素を並べるだけで良いので可読性も高く便利です。
参考:
http://qiita.com/donsan_24/items/f2be9b6828b73d3fc49e
List<String> list = Arrays.asList("AA", "BB", "CC");
ただし、致命的な問題があり、これで生成したListは、固定サイズのArrayListであるためaddやremoveができません。
List<String> list = Arrays.asList("AA", "BB", "CC");
// UnsupportedOperationExceptionが発生する
list.add("DD");
list.remove(0);
標準ライブラリの問題とも言えますが、固定サイズのリストで大丈夫なら便利かも。
ドキュメントにもちゃんと「固定サイズ」と書かれています。
https://docs.oracle.com/javase/jp/7/api/java/util/Arrays.html#asList(T...)
##インスタンスイニシャライザを使う方法
インスタンス生成時にメソッドを呼ぶ記述法です。
括弧がわかりにくいですが、原理的には「すべてaddする」方法と同じです。
List<String> list = new ArrayList<String>(){
{
add("AA");
add("BB");
add("CC");
}
};
##コンストラクタでListを与える。
raccyさんにコメントいただきました。
そういえばListのコンストラクタでListを与えることができるのを失念してました。
なので初期化するのはこの方法が良さそうです。
List<String> list = new ArrayList<>(Arrays.asList("AA", "BB", "CC"));
#要素の追加
##すべてaddする
要素分addします。
追加する分行を追加するか
拡張for分などでforを回してしまう事が考えられれます。
(個人的には後者が好きです)
List<String> list = new ArrayList<>();
list.add("AA");
list.add("BB");
list.add("CC");
List<String> list = new ArrayList<>();
for (String item : new String[]{"AA", "BB", "CC"}) {
list.add(item);
}
##asListとList.addAllを使う
asListで作ったListを対象のListにaddAllしてしまう方法です。
リストを入れなおしているので先ほどの制限を受けないため、こちらもお勧めです。
List<String> list = new ArrayList<>();
list.addAll(Arrays.asList("AA", "BB", "CC"));
list.add("DD");
list.remove(0);
##Collections.addAllを使う
(実は最近まで知らなかったのですが、色々してたらIntelliJ IDEAが提案してくれたのですごいと思いました。)
List<String> list = new ArrayList<String>();
Collections.addAll(list, new String[]{"AA", "BB", "CC"});
さらにaddAllの第二引数は可変長引数なのでこう書けます。
追加では多分これが一番よさげだと思ってます。
List<String> list = new ArrayList<String>();
Collections.addAll(list, "AA", "BB", "CC");
#まとめ
Listの初期要素はコンストラクタにasListで指定、
要素の追加はCollections.addAllを検討してましょう。