はじめに
Javaでメモリを無駄にしないリストの初期化および追加方法を
学んだので、メモとして残します!
様々な初期化のやり方
調べてみると初期化~追加のやり方って様々な方法があるんですね。
ちょっと抜粋して3つほど記載します。
1.一般的(よく見る)
List<String> list = new ArrayList<String>();
list.add("No.1");
list.add("No.2");
list.add("No.3");
2.初期値を入れる(インスタンスイニシャライザを使う)
List<String> list = new ArrayList<String>(){
{
add("No.1");
add("No.2");
add("No.3");
}
};
3.初期値を入れる(asList)
これは、注意が必要なやつですね。
指定された配列に連動する固定サイズのリストを返します。
そのため、要素の追加や削除ができません。(UnsupportedOperationException)
addとか書いてもコンパイルは通るので、落とし穴になりがちです。
List<String> list = Arrays.asList("No.1", "No.2", "No.3");
なので、以下のようにすることで1・2同様のリストが作れます。
List<String> list = new ArrayList<String>(Arrays.asList("No.1", "No.2", "No.3"));
メモリの無駄がないのはどれだ?
メモリ効率に注目して見ましょう。
引数なしの場合
List<String> list = new ArrayList<String>();
上記のようにした場合、デフォルトで初期容量10の配列を作ります。
引数ありの場合(initialCapacity)
コンストラクタにサイズ(initialCapacity)を渡すことができます。
List<String> list = new ArrayList<String>(3);
これで必要な数の初期容量を持ったリストが作成されます。
引数ありの場合(配列を渡した場合)
List<String> list = new ArrayList<String>(Arrays.asList("No.1", "No.2", "No.3"));
この場合は引数で渡された要素数を利用して、
必要な数の容量を持ったリストが作成されます。
まとめ
無駄がないのは、以下2点だと思います。
- 引数ありの場合(initialCapacity)
- 引数ありの場合(配列を渡した場合)
私は、
List<String> list = new ArrayList<String>(Arrays.asList("No.1", "No.2", "No.3"));
を使うことにしました\(^o^)/