Java - リスト内にリストを追加する(2次元リスト)

Javaでは、ArrayListにArrayListを追加して2次元リストのように初期化できます。

1. リスト内にリストを追加する

リストを要素として持つリストは以下のように定義できます。

List<List<Type>> myList = new ArrayList<>();

以下の例は、3つのリストを要素として持つリストを初期化する例です。 デフォルトでは、リスト要素のサイズはゼロであり、値はありません。

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

public class Example1 {

    public static void main(String[] args) {

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

        for (int i = 0; i < 3; i++)  {
            myList.add(new ArrayList<>());
        }

        for (int i = 0; i < 3; i++)  {
            System.out.println(myList.get(i));
        }
    }
}

Output:

[]
[]
[]

2. リスト要素のサイズと初期値を設定して初期化

上記の例は、リスト要素のサイズがゼロでした。

Collections.nCopies(size, value) はサイズが size で、初期値が value のリストを生成します。

以下の例のように、リストのサイズと初期値を設定して初期化できます。 二次配列のようにアクセスするには、 List.get(i).get(j) のようにアクセスできます。

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

public class Example2 {

    public static void main(String[] args) {

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

        for (int i = 0; i < 3; i++)  {
            myList.add(Collections.nCopies(3, null));
        }

        for (int i = 0; i < 3; i++)  {
            System.out.println(myList.get(i));
        }
    }
}

Output:

[null, null, null]
[null, null, null]
[null, null, null]

3. 初期値がそれぞれ異なるリスト生成

リスト要素ごとに異なる初期値を持つようにするには、以下のように Arrays.asList() で要素別の異なるリストを直接生成する必要があります。

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

public class Example3 {

    public static void main(String[] args) {

        List<List<String>> myList = Arrays.asList(Arrays.asList("a", "b", "c"),
                Arrays.asList("d", "e", "f"),
                Arrays.asList("h", "i", "j"));

        for (int i = 0; i < 3; i++)  {
            System.out.println(myList.get(i));
        }
    }
}

Output:

[a, b, c]
[d, e, f]
[h, i, j]

4. 2次配列のようにデータアクセス

arr[i][j] のように 2 次配列のように行と列の Index でデータにアクセスしたいときは Array.get(i).get(j) のようにアクセスできます。

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

public class Example3 {

    public static void main(String[] args) {

        List<List<String>> myList = Arrays.asList(Arrays.asList("a", "b", "c"),
                Arrays.asList("d", "e", "f"),
                Arrays.asList("h", "i", "j"));

        for (int i = 0; i < 3; i++)  {
            for (int j = 0; j < 3; j++) {
                System.out.println("myList[" + i + "][" + j + "] = "
                        + myList.get(i).get(j));
            }
        }
    }
}

Output:

myList[0][0] = a
myList[0][1] = b
myList[0][2] = c
myList[1][0] = d
myList[1][1] = e
myList[1][2] = f
myList[2][0] = h
myList[2][1] = i
myList[2][2] = j
codechachaCopyright ©2019 codechacha