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

新手上路,请多包涵

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

这有效:

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

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

原文由 cody 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 988
2 个回答

这是一个古老的答案,但情况有所改变。对于 Java 9+,这可以使用 List.of() 方法来完成,该方法返回一个不可变列表,它是 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年答案

如果您创建一个辅助方法,代码看起来会好一点。例如

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)

原文由 Augusto 发布,翻译遵循 CC BY-SA 4.0 许可协议

你可以这样做:

 import static java.util.Arrays.*;

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

原文由 x4u 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题