如何静态初始化二维列表



如何静态初始化多维列表?

这项工作:

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

但我想用一些静态列表初始化列表,比如:(1,2,3)、(4,5,6)和(7,8,9)

这是一个老答案,但情况发生了一些变化。对于java9+,这可以使用List.of()方法来完成,该方法返回一个不可变的List,该List是AbstractImmutableList的子类。

import java.util.List;
List<List<Integer>> list = List.of(
                               List.of(1, 2, 3),
                               List.of(4, 5, 6),
                               List.of(7, 8, 9)
                           );

对于旧版本的java,或者如果需要一个可变的List,旧的答案仍然有效:

2011年答案

如果您创建了一个helper方法,代码看起来会更好一些。例如

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,但它们的实现是非常非常不同的。

上面的注释也是旧的,对于java 9+使用List.of(E...elem)

您可以这样做:

import static java.util.Arrays.*;

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

您可以通过在代码中添加一个静态块来实现这一点。

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
}

相关内容

  • 没有找到相关文章

最新更新