LoginSignup
166
174

More than 5 years have passed since last update.

JavaでListの要素を初期化・追加する方法

Last updated at Posted at 2015-08-14

初めに

JavaでListの要素を初期化・追加を設定したい場合のイディオムを幾つか紹介して、
行き着いたものを紹介します。

環境

java version "1.8.0_25"です。

初期化

asListを使う

検索するとよくでてくる方法がasListを使う方法です。
1行で書けて、要素を並べるだけで良いので可読性も高く便利です。

参考:
http://qiita.com/donsan_24/items/f2be9b6828b73d3fc49e

asListを使う
List<String> list = Arrays.asList("AA", "BB", "CC");

ただし、致命的な問題があり、これで生成したListは、固定サイズのArrayListであるためaddやremoveができません。

asListを使う
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を与える
List<String> list = new ArrayList<>(Arrays.asList("AA", "BB", "CC"));

要素の追加

すべてaddする

要素分addします。
追加する分行を追加するか
拡張for分などでforを回してしまう事が考えられれます。
(個人的には後者が好きです)

すべてadd追加
List<String> list = new ArrayList<>();
list.add("AA");
list.add("BB");
list.add("CC");
forですべてadd追加
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が提案してくれたのですごいと思いました。)

Collections.addAllを使う
List<String> list = new ArrayList<String>();
Collections.addAll(list, new String[]{"AA", "BB", "CC"});

さらにaddAllの第二引数は可変長引数なのでこう書けます。
追加では多分これが一番よさげだと思ってます。

Collections.addAllを使う
List<String> list = new ArrayList<String>();
Collections.addAll(list, "AA", "BB", "CC");

まとめ

Listの初期要素はコンストラクタにasListで指定、
要素の追加はCollections.addAllを検討してましょう。

166
174
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
166
174