Java
2022.01.21
【Java初心者向け】Listを初期化・初期値設定する方法とは?
2023.11.18

本記事で紹介するサンプルコードは、macOS Montere、OpenJDK-11.0.13で動作確認しています。


1.JavaのListを初期化する基本的な方法

JavaのListを初期化する基本的な方法を解説します。初期化する方法はいくつかありますが、ここでは基本的な方法を紹介します。


JavaのListについて詳しく知りたい方は、以下の記事も参考にしてみてください。

①new演算子とArrayListで初期化する

Listは初期化時にデータの型を指定することで、さまざまなデータ型を格納できます。データ型には、「String」や「Integer」などがありますね。


new演算子でArrayListクラスのインスタンスを生成し、Listオブジェクトに格納します。


たとえば、String型のListは、以下のように記述します。

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

また、ダイヤモンド構文を用いると、初期化時に型を省略して書けます。型名が複雑なときに有効で、コードがシンプルになりますよ。

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

②サイズを指定して初期化する

ArrayListのコンストラクタで、サイズを指定し初期化できます。指定したサイズで配列が生成されるため、そのサイズを超えるまで配列の再生成は発生しません。


要素数が大きくなることがわかっている場合は、大きなサイズを指定して初期化することをおすすめします。初期化で設定したサイズ以上に要素を追加すると、サイズ拡張処理により動作が遅くなるためです。


要素数が500のListは、以下のように記述します。

List<String> programlist = new ArrayList<String>(500);


2.Listを初期化する際に初期値を設定する方法

Listの初期値を設定する基本的な方法を解説します。

①Arrays.asListで値を指定し、コンストラクタで渡す

Arrays.asListは、引数で指定した配列をListとして返すメソッドです。


Arryas.asListをArrayListのコンストラクタに指定する方法について、サンプルコードを見ながら確認していきましょう。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class App {
    public static void main(String[] args) {
        
        //初期化の際にArrays.asListで値を指定し、コンストラクタで渡す
        List<String> programlist = new ArrayList(Arrays.asList("Java","Python","C#"));

        //出力
        for(int i = 0; i < programlist.size(); i++){
            System.out.println(programlist.get(i));
        }
    }
}

実行結果:

Java
Python
C#

このように、リストのサイズを決めずに初期値を設定することが可能です。

②Arrays.asListを使って初期化

次に、Arrays.asListを使って初期化するサンプルコードを紹介します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class App {
    public static void main(String[] args) {
        
         //Arrays.asListを使って初期化
         List<String> programlist = Arrays.asList("Java","Python","C#");
         
        //出力
        for(int i = 0; i < programlist.size(); i++){
            System.out.println(programlist.get(i));
        }
    }
}

実行結果:

Java
Python
C#

リストに要素を追加・削除できないので注意

Arrays.asListは戻り値のリストの長さが固定されます。そのため、リストに対してaddメソッドやdeleteメソッドで要素数を変更しようとすると、実行時エラーが発生します。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class App {
    public static void main(String[] args) {
        
         //Arrays.asListを使って初期化
         List<String> programlist = Arrays.asList("Java","Python","C#");

         //Listに追加
         programlist.add("VB.NET");
         
        //出力
        for(int i = 0; i < programlist.size(); i++){
            System.out.println(programlist.get(i));
        }
    }
}

実行結果:

Exception in thread "main" java.lang.UnsupportedOperationException
        at java.base/java.util.AbstractList.add(AbstractList.java:153)
        at java.base/java.util.AbstractList.add(AbstractList.java:111)
        at App.main(App.java:12)

この問題は、先に紹介した「①Arrays.asListで値を指定し、コンストラクタで渡す」で回避できます。サンプルコードで確認してみましょう。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class App {
    public static void main(String[] args) {
        
         //Array.asListで値を指定し、コンストラクタで渡す
        List<String> programlist = new ArrayList(Arrays.asList("Java","Python","C#"));

         //Listに追加
         programlist.add("VB.NET");

        //出力
        for(int i = 0; i < programlist.size(); i++){
            System.out.println(programlist.get(i));
        }
    }
}

実行結果:

Java
Python
C#
VB.NET

基本的に、要素数の追加ができる①の方法を使用する方が良いでしょう。


なお、②の初期化方法は、配列数が固定長であることが明白な場合によく使われます。

③addメソッドで値を追加

addメソッドを使って、初期化時に値を追加することも可能です。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class App {
    public static void main(String[] args) {
        
        //addメソッドで値を追加
        List<String> programlist = new ArrayList<String>(){
            {
                add("Java");
                add("Python");
                add("C#");
            }
        };
        
        //出力
        for(int i = 0; i < programlist.size(); i++){
            System.out.println(programlist.get(i));
        }
    }
}

実行結果:

Java
Python
C#

④List.ofを使って初期化

List.ofはJava9で追加されたメソッドです。


以下は、List.ofメソッドを使い初期化時に値を追加するサンプルコードです。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class App {
    public static void main(String[] args) {
        
        //List.ofを使って初期化
        List<String> programlist = List.of("Java","Python","C#");

        //出力
        for(int i = 0; i < programlist.size(); i++){
            System.out.println(programlist.get(i));
        }
    }
}

実行結果:

Java
Python
C#

List.ofメソッドを使用すると、Arrays.asList同様、シンプルなコードで初期化時に値を追加できます。List.ofは変更不可のリストなため、値の追加、変更、削除はできません。


またArrays.asListはnullを許容しますが、List.ofはnullを許容しません。


この記事をシェア