【问题标题】:add two dimensional list to multidimensional arraylist将二维列表添加到多维数组列表
【发布时间】:2014-06-21 10:20:33
【问题描述】:

我有一个带有 2d 列表的循环,我在其中删除和添加元素,并希望将这些临时数组列表添加到另一个列表的维度中。

例子,

  // 2d list
  List<List<Integer>> p = new ArrayList<List<Integer>>();
  // 3d list
  List<List<List<List<Integer>>>> list1 = new ArrayList<List<List<List<Integer>>>>();
  // this compiles ok
  list1.get(0).add(p);

但我收到以下错误:

  java.lang.IndexOutOfBoundsException: Index: 0, Size: 0

【问题讨论】:

  • 很简单,list1 中没有项目。它是空的。
  • 一般来说,如果你正在创建一个 List>>,是时候创建一些 getter / setter 类,每个类都封装一个 List>。

标签: java arrays arraylist multidimensional-array


【解决方案1】:

您需要实例化每个列表......而不仅仅是您尝试访问的列表。这意味着如果您有一个 2x2 矩阵,则需要 2 行 = 2 个列表,以及另一个列表来保存它们,如果矩阵开始变得更复杂,则依此类推。

List<List<Integer>> matrix = new ArrayList<List<Integer>>();
List<Integer> row = new ArrayList<Integer>();
matrix.add(row);

【讨论】:

    【解决方案2】:

    在您的示例中,您的“list1”对象实际上是 4d,但它们没有初始化,因此当您要求“list1”获取内部的第一个(三维)列表时,它根本不存在(Java 中的数组开始大小为 0),所以没有什么要添加的。

    你可以这样做:

    List<List<List<List<Integer>>>> list1 = new ArrayList<List<List<List<Integer>>>>();
    
    List<List<List<Integer>>>> 3dlist = new ArrayList<List<List<Integer>>>();
    
    list1.add(3dlist)
    list1.get(0).add(p);
    

    现在,像这样直接使用多维数组并不实际——您可能希望将它们封装在一个对象中。

    【讨论】:

    • 嗨,谢谢。这行得通。但是,当我将例如 p = [1,2,3],[5,5,5] 添加到 list1.get(0).add(p);然后当我将 p 更改为等于 p = [0,0,0],[7,7,7] 之类的其他值时,我再次添加到另一个维度 list1.get(1).add(p);然后打印 System.out.print(list1.get(0)) 它不只打印 [1,2,3],[5,5,5] 而是所有 [1,2,3],[5, 5,5],[0,0,0],[7,7,7] ?当我打印 (list1.get(1)) 时也是如此。我想以某种方式将临时 2d 列表区分为维度以分别访问它们..
    • 这是一个越来越多的设计问题——StackOverflow 并不完全适合这个问题。我不太确定你想在这里实现什么。如果您需要有关设计的一般帮助,您可能想尝试reddit.com/r/learnprogramming 或类似的东西。
    • 好吧。我想我想达到的目标很清楚。我想要一个可以存储二维列表的数组或任何其他容器。因此,当我调用 Container.get(0) 时,它将返回我存储在那里的所有 2d 列表,例如 [1,2],[3,4],当我调用 Container.get(1) 时,它将显示另一组 2d [5,6]、[7,8] 等列表..
    猜你喜欢
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    相关资源
    最近更新 更多