LoginSignup
10
10

More than 5 years have passed since last update.

配列初期化~追加のいろいろ?

Posted at

はじめに

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同様のリストが作れます。
java
List<String> list = new ArrayList<String>(Arrays.asList("No.1", "No.2", "No.3"));

メモリの無駄がないのはどれだ?

メモリ効率に注目して見ましょう。

引数なしの場合

List<String> list = new ArrayList<String>();

上記のようにした場合、デフォルトで初期容量10の配列を作ります。

引数ありの場合(initialCapacity)

コンストラクタにサイズ(initialCapacity)を渡すことができます。
java
List<String> list = new ArrayList<String>(3);

これで必要な数の初期容量を持ったリストが作成されます。

引数ありの場合(配列を渡した場合)

List<String> list = new ArrayList<String>(Arrays.asList("No.1", "No.2", "No.3"));

この場合は引数で渡された要素数を利用して、
必要な数の容量を持ったリストが作成されます。

まとめ

無駄がないのは、以下2点だと思います。
1. 引数ありの場合(initialCapacity)
2. 引数ありの場合(配列を渡した場合)

私は、
java
List<String> list = new ArrayList<String>(Arrays.asList("No.1", "No.2", "No.3"));

を使うことにしました\(^o^)/

10
10
4

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
10
10