【问题标题】:Java - How to iterate through 3-dimensional ArrayList?Java - 如何遍历 3 维 ArrayList?
【发布时间】:2015-12-27 07:35:54
【问题描述】:

我正在尝试为我的项目实施 ArrayList,但在途中遇到了一些问题。如果有人可以帮助我,那就太好了。

我有这个字符串的 3 维数组,遍历它以让它保存一些字符串值。

for(int x=0;x<array.length;x++){
  for(int y=0;y<array[0].length;y++){
    for(int z=0;z<array[0][0].length;z++){
       array[x][y][z] = "Lorem ipsum";
    }
  } 
}

但由于其大小的灵活性,我决定改用 ArrayList。

问题是,我不知道如何遍历 3 维 ArrayList。认为这样的事情会起作用,但它没有。

ArrayList<ArrayList<ArrayList<String>>> arrSup = new ArrayList<ArrayList<ArrayList<String>>>();

for(int x=0;x<arrSup.size();x++){
  for(int y=0;y<arrSup[0].size();y++){
    for(int z=0;z<arrSup[0][0].size();z++){
       array[x][y][z] = "Lorem ipsum";
    }
  } 
}

那么,谁能告诉我如何遍历 3 维 ArrayList?

谢谢。

【问题讨论】:

  • 在 Java 7(及更高版本)中,借助菱形运算符,您可以将声明简化为 List&lt;List&lt;List&lt;String&gt;&gt;&gt; arrSup = new ArrayList&lt;&gt;();

标签: java multidimensional-array arraylist


【解决方案1】:

与多维数组不同,Lists不是为你分配的,所以你必须自己添加子Lists。

迭代可以通过两种方式完成,这取决于你是否需要坐标。

// Build matrix
final int SIZE_X = 10;
final int SIZE_Y = 10;
final int SIZE_Z = 10;
List<List<List<String>>> matrix = new ArrayList<>();
for (int x = 0; x < SIZE_X; x++) {
    List<List<String>> yList = new ArrayList<>();
    matrix.add(yList);
    for (int y = 0; y < SIZE_Y; y++) {
        List<String> zList = new ArrayList<>();
        yList.add(zList);
        for (int z = 0; z < SIZE_Z; z++)
            zList.add("Lorem ipsum");
    }
}

// Iterate matrix without coordinates
for (List<List<String>> yList : matrix)
    for (List<String> zList : yList)
        for (String value : zList) {
            System.out.println(value);
        }

// Iterate matrix with coordinates
for (int x = 0; x < matrix.size(); x++) {
    List<List<String>> yList = matrix.get(x);
    for (int y = 0; y < yList.size(); y++) {
        List<String> zList = yList.get(y);
        for (int z = 0; z < zList.size(); z++) {
            String value = zList.get(z);
            System.out.println(value);
        }
    }
}

【讨论】:

    【解决方案2】:

    假设一个 10x10x10 的数组:

        ArrayList<ArrayList<ArrayList<String>>> arrSup = new ArrayList<ArrayList<ArrayList<String>>>();
    
        for (int x = 0; x < 10; x++) {
            arrSup.add(new ArrayList<ArrayList<String>>());
            for (int y = 0; y < 10; y++) {
                arrSup.get(x).add(new ArrayList<String>());
                for (int z = 0; z < 10; z++) {
                    arrSup.get(x).get(y).add("Lorem ipsum");
                }
            }
        }
    

    【讨论】:

      【解决方案3】:

      您需要使用get arrayList 没有索引。

      ArrayList<ArrayList<ArrayList<String>>> arrSup = new ArrayList<ArrayList<ArrayList<String>>>();
      
      for(int x=0;x<arrSup.size();x++){
        for(int y=0;y<arrSup.get(0).size();y++){
          for(int z=0;z<arrSup.get(0).get(0).size();z++){
             array.get(x).get(y).set(z, "Lorem ipsum");
          }
        } 
      }
      

      【讨论】:

      • 改了,也注意到了。
      【解决方案4】:

      使用ArrayList::get(int index)ArrayList::set(int index, T value)

      int INITIAL_X_SIZE = 100;
      int INITIAL_Y_SIZE = 100;
      int INITIAL_Z_SIZE = 100;
      ArrayList<ArrayList<ArrayList<String>>> arrSup = new ArrayList<ArrayList<ArrayList<String>>>(INITIAL_X_SIZE);
      
      // Initialize the ArrayLists:
      for(int x = 0; x < INITIAL_X_SIZE; x++) {
        arrSup.set(x, new ArrayList<ArrayList<String>>(INITIAL_Y_SIZE));
        for(int y = 0;y < INITIAL_Y_SIZE; y++) {
          arrSup.get(x).set(x, new ArrayList<String>(INITIAL_Z_SIZE));
        }
      }
      
      // Iterate through it and do whatever you want to do:
      for(int x = 0; x < arrSup.size(); x++) {
        for(int y = 0; y < arrSup.get(x).size(); y++) {
          for(int z = 0; z<arrSup.get(x).get(y).size(); z++) {
             array.get(x).get(y).set(z, "Lorem ipsum");
          }
        } 
      }
      

      【讨论】:

        猜你喜欢
        • 2019-01-25
        • 1970-01-01
        • 2014-10-21
        • 2013-12-26
        • 2015-02-13
        • 2019-04-19
        • 1970-01-01
        • 2012-11-19
        • 2015-11-28
        相关资源
        最近更新 更多