【Java】配列とListの違い

#技術系
written by みよしや

こんにちは、みよしやです。

今回は、Javaの配列とListの違いについて書いていきます。

配列とは

型が同じ値を複数用意する場合、1つずつ変数を定義すると後続処理での扱いが大変です。
そういった場合は配列に格納することでまとめて扱うことができます。
値を格納した順に、インデックス(添え字)という番号が0から割り当てられていきます。
配列は宣言時に要素数を決める必要があり、後から要素数を変更することは不可能です。

String[] array = new String[3];

宣言は、型[] 変数名 = new 型[要素数] で行います。

array[0] = "サンプル";
System.out.println(array[0]);

変数名[インデックス番号] = 値 で値を代入し、変数名[インデックス番号] で値を取得します。

 

Listとは

Listはコレクションインターフェースの1つで、java.utilパッケージにあるクラスです。
Listも型が同じ複数の値を扱うための機能ですが、配列とは違い宣言時に要素数を決める必要がありません。
配列は最初にメモリ領域を確保するのに対して、Listは新しい要素が追加される度にメモリ領域を確保するためです。
そのためあらかじめ要素数が決まっていない(サイズが可変)場合などに役立ちます。

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

宣言は、List<型> 変数名 = new ArrayList<>() で行います。

list.add("サンプル");
System.out.println(list.get(0));

変数名.add(値) で値を代入し、変数名.get(インデックス番号) で値を取得します。

 

Listから配列への変換方法

String[] array = list.toArray(new String[list.size()]);

java.util.CollectionクラスのtoArrayメソッドを使用します。

 

配列からListへの変換方法

List<String> list = Arrays.asList(array);

java.util.ArraysクラスのasListメソッドを使用します。
このメソッドを使用する際1つ注意しなければならない点があります。
asListメソッドで生成したListはサイズが固定となるため、後から要素の追加・削除ができなくなってしまいます。

List<String> list = new ArrayList<>(Arrays.asList(array));

回避するには上記のように、asListメソッドで生成したListを元に新たなListを生成する必要があります。

 

サンプルコード

// 配列

String[] array = new String[3];

array[0] = "A";
array[1] = "B";
array[2] = "C";

System.out.println(array[0] + array[1] + array[2]);


// List

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

list.add("D");
list.add("E");
list.add("F");

System.out.println(list.get(0) + list.get(1) + list.get(2));

出力結果

ABC
DEF

 

最後に

配列とListの使い分けは、Javaに慣れていないうちは困惑する人が多いと思います。
今回説明した、要素数の決定する(メモリ確保)タイミングなどを参考に、どちらを使用すべきか検討してみてください。