web-dev-qa-db-ja.com

2次元リストを静的に初期化するにはどうすればよいですか?

多次元リストを静的に初期化するにはどうすればよいですか?

これは機能します:

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

しかし、(1,2,3)、(4,5,6)、(7,8,9)のような静的リストでリストを初期化したいと思います。

18
cody

ヘルパーメソッドを作成すると、コードは少し見栄えが良くなります。例えば

public class Collections {
    public static <T> List<T> asList(T ... items) {
        List<T> list = new ArrayList<T>();
        for (T item : items) {
            list.add(item);
        }

        return list;
    }
}

その後、(静的インポートを使用して)実行できます

List<List<Integer>> list = asList(
                             asList(1,2,3),
                             asList(4,5,6),
                             asList(7,8,9),
                           );

Arrays.asList()を使用しない理由

Arrays.asList()は、Java.util.Arrays.ArrayList型のクラスを返します(これはArraysの内部クラスです)。私が見つけた問題は、Java.lang.ArrayListを使用していると考えるのは非常に簡単ですが、それらのインターフェースは非常に、非常に異なるということです。

13
Augusto

あなたはこのようにそれを行うことができます:

import static Java.util.Arrays.*;

.。

List<List<Integer>> list = asList(
    asList( 1, 2, 3 ),
    asList( 4, 5, 6 ),
    asList( 6, 7, 8 ) );
8
x4u

これを行うには、コードに静的ブロックを追加します。

private static List<List<Integer>> list = new ArrayList<List<Integer>>();
static {
  List<Integer> innerList = new ArrayList<Integer>(3);
  innerList.add(1);
  innerList.add(2);
  innerList.add(3);
  list.add(innerList);
  //repeat
}
6
JustinKSU