プログラミング開発

【Java入門】JavaでListを初期化する方法:初心者に優しい解説

この記事は約6分で読めます。

はじめに

Javaでプログラミングを行なっていく際、配列・リストを使う場面は非常に多いです。本記事では、Javaでリストを初期化する基本的な方法を紹介します。

Listとは?

ListはJavaのコレクションフレームワークの一部で、順序を持つ要素の集合です。代表的な実装クラスとして、ArrayListがあります。

基本的な初期化方法

  • new ArrayList<>(): 柔軟で最も一般的な方法
  • Arrays.asList(): 配列をリストに変換する簡潔な方法
  • List.of(): 簡潔で不変なリストを作成する方法

new ArrayList<>()

素直にArrayListクラスをインスタンス化する方法です。インスタンス化したリストオブジェクトに対して、要素を追加して集合を作る方法で、変更を前提としたリストオブジェクトを作成する場合、最も使われる方法です。

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

public class Main {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
    list.add("Apple");
    list.add("Banana");
    list.add("Cherry");
        System.out.println(list);
    }
}

Arrays.asList()

ArraysクラスのasListメソッドを利用し、リストオブジェクトを取得する方法です。ArrayListを初期化する方法に比べると、1行ですっきりかける点が嬉しいポイントです。ただし、この方法で作成したリストは固定長で、要素の追加や削除ができません。また、Arraysクラスは配列に関するクラスであるため、配列からリストへの変換が必要な際に使うことが多く、主に既存の配列を簡単にリストとして操作したい場合に便利ですが、初期化処理には向かない印象です。

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

public class Main {
    public static void main(String[] args) {
    List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
    System.out.println(list);
    }
}

List.of()

Listインターフェースのofメソッドを利用し、リストオブジェクトを作成する方法です。こちらも1行ですっきりかける点が嬉しいポイントで、Arrays.asList()と同じく、作成したリストは要素の追加や削除ができません。最も簡潔で使われている方法だと思います。

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

public class Main {
    public static void main(String[] args) {
    List<String> list = List.of("Apple", "Banana", "Cherry");
    System.out.println(list);
    }
}

Arrays.asList()とList.of()は何が違うのか?

相違点一覧

特性Arrays.asList()List.of()
戻り値の型サイズ固定のリスト不変リスト(※)
サイズ変更不可不可
要素の上書き可能不可
要素の型null を許容null を許容しない
※不変リストとは

不変リストとは、作成後に要素の変更(追加・削除・更新)が一切できないリストのことです。プログラムの安全性が向上し、意図しない変更を防ぐことができます。

ほんのり厄介なArrays.asList()

Arrays.asList()は完全な不変リストでない

Arrays.asList()から生成されるリストは要素の上書きが可能で、完全な不変リストでない点が厄介です。

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

public class Main {
    public static void main(String[] args) {
        String[] array = {"Apple", "Banana", "Cherry"};
        List<String> list = Arrays.asList(array);

        // 要素の上書きが可能
        list.set(1, "Blueberry");
        System.out.println(list); // [Apple, Blueberry, Cherry]
    }
}

プログラムを読む際、登場する変数は最小限であるほうが読みやすいです。つまり変数に入るものは最終成果物であるべきで、変更できないこと(巷でいうimmutableというやつ)を前提とされていたほうが良いと考えます。なので、上書きが可能であることは、プログラムを読む時には、要素の変更が可能であることを前提とするため考えることが増え、プログラムが読みにくくなってしまい、またバグ混入リスクを抱えていると言えます。

Arrays.asList()にnullが混入することが許容される

また、リストの中にnullが入りうるのが、厄介です。「ぬるぽ」という言葉が現場で飛び交うほどで、Javaとはnullとの戦いです。

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

public class Main {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Apple", null, "Cherry");
        System.out.println(list); // [Apple, null, Cherry]
    }
}

リストにnullが含まれる場合、設計上の不整合や予期しないエラーが発生するリスクが高まります。そのため、リストにnullを格納することは一般的に避けるべきです。

まとめ

本記事では、Javaでリストを初期化する基本的な方法を紹介します。リストを初期化するという観点では、動的なリスト(要素の追加・削除が頻繁にある場合)を生成する場合はnew ArrayList<>()、不変リストを生成する場合はList.of()を用いるのが良いと考えます。ユースケースに応じて、選択してください!

  • new ArrayList<>()
    柔軟で最も一般的な方法。動的なリスト(要素の追加・削除が頻繁にある場合)に最適。変更可能なリストが必要な場合に使用。
  • Arrays.asList()
    配列をリストに変換する簡潔な方法で配列をリストに変換する際に使用。固定長リストであることに注意。要素の追加や削除はできないが、要素の上書きは可能。
  • List.of()
    簡潔で不変なリストを作成する方法。要素が固定されている安全なリストが必要な場合に最適で、簡潔に不変リストを作成する場合に適している。