【问题标题】:Fill a 2D ArrayList with zeros用零填充 2D ArrayList
【发布时间】:2016-03-31 13:16:27
【问题描述】:

我知道我可以使用以下语句填充一些 zeros 的普通矢量/列表:

double[][] list = new double[10][10]; // It will automatically inserts 0's in all positions.
List<Double> list1 = new ArrayList(new ArrayList(Collections.nCopies(10, 0d))); // Also

我想用 2D 列表制作同样的东西,可以吗?

List<List<Double>> list2 = new ArrayList();
// It doesn't work -> List<List<Double>> list2 = new ArrayList(new ArrayList(Collections.nCopies(10, 0d)));

顺便说一句,我想避免使用显式循环。

【问题讨论】:

  • Collections.nCopies() 将返回一个列表,其中包含 n 个索引中的 one 元素。由于Double 是不可变的,这很好,但不要将其与可变对象(例如列表)一起使用。顺便说一句,不需要内部数组列表。甚至外部列表也只是一个副本,包含 10 个对 same Double 实例的引用。
  • 另外:I want to avoid to use explicit loop - 为什么?
  • @Thomas 因为循环太棒了 2015 年。

标签: java arraylist collections


【解决方案1】:
List<Double> list1 = new ArrayList(new ArrayList(Collections.nCopies(10, 0d)));

这是多余的。您将列表传递给第二个构造函数。这就够了:

List<Double> list1 = new ArrayList(Collections.nCopies(10, 0d));

使用 2D 列表,您可以这样做:

List<List<Double>> list2 = new ArrayList(Collections.nCopies(10, new ArrayList(Collections.nCopies(10, 0d))));

但要小心,该列表包含对同一列表的十倍引用。

如果您想拥有不同的列表并避免和显式 for 循环,您可以使用隐式 for 循环和 java 8。

List<List<Double>> list2 = new ArrayList();
Collections.nCopies(10, new ArrayList(Collections.nCopies(10, 0d))).forEach((list) -> list2.add(new ArrayList(list)));

【讨论】:

  • 用例很有可能要求列表不同
  • 是的,我看到我复制并粘贴了它:List&lt;Double&gt; list1 = new ArrayList(new ArrayList(Collections.nCopies(10, 0d))); 错误,但我在我的机器上做了。感谢您的回复。
【解决方案2】:

流,例如:

List<List<Double>> list2 = IntStream.range(0, 10)
        .mapToObj(i -> new ArrayList<Double>(Collections.nCopies(10, 0d)))
        .collect(Collectors.toList());

它也会迭代,但是是隐式的。

【讨论】:

    【解决方案3】:

    接下来呢?

    Stream.generate(() -> new ArrayList<Double>(Collections.nCopies(10, 0.0)))
          .limit(10)
          .collect(Collectors.toList());
    

    【讨论】:

    • 它会生成一个ArrayList 类型的Collections$CopiesList
    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多