如何在java中将2Darray转换为2D ArrayList?

时间:2017-01-16 09:06:29

标签: java arrays arraylist multidimensional-array

我搜索过类似的问题,但仍然无法找到适合我案例的解决方案。基本上,我有一个名为' array2D'的2D阵列。我试图将它们转换为2D arrayList。我试图创建一个arrayList并用于循环来复制我的array2D中的每个元素,这是一个原始的2D数组。我想知道是否有任何干净有效的方法。

这是我的代码:

    List<List<String>> arrayList2D = new ArrayList<List<String>>();
    List<String> eachRecord = new ArrayList<String>();

    for (int i=0; i< array2D.length; i++){
      for(int j =0; j<array2D[1].length; j++){
        eachRecord.add(String.valueOf(array2D[j]));
      }
      arrayList2D.add(eachRecord);
      eachRecord.clear();
    }

    System.out.println(Arrays.toString(arrayList2D.toArray()));

结果返回空arrayList,这意味着我无法转换它们。

[[], [], [], [], [], [], [], [], [], [], [], [], [], []]

我怀疑我无法填充新的ArrayList的原因是因为add方法的错误用法,我也尝试了push方法,这是编译错误。我想知道是否有任何干净有效的方法。

3 个答案:

答案 0 :(得分:3)

我建议您对代码进行3项改进。

  1. 使用array2D[i].length代替array2D[1].length

  2. 使用eachRecord.add(String.valueOf(array2D[i][j]));代替eachRecord.add(String.valueOf(array2D[j]));

  3. array2D[index]返回一个总数组。 array2D[indexRow][indexCol]返回那些索引处的对象。

    1. 而不是clear()启动循环内的eachRecord列表。
    2. 第一个List<String> eachRecord = new ArrayList<String>();循环内的

      for

      String [][]array2D = {{"A", "B"}, {"C", "D"}, {"E", "F"}};
          List<List<String>> arrayList2D = new ArrayList<List<String>>();
          for (int i = 0; i < array2D.length; i++) {
              List<String> eachRecord = new ArrayList<String>();
              for (int j = 0; j < array2D[i].length; j++) {
                  eachRecord.add(String.valueOf(array2D[i][j]));
              }
              arrayList2D.add(eachRecord);
          }
          System.out.println(arrayList2D);//[[A, B], [C, D], [E, F]]
      

      如果要添加整个数组,可以使用Arrays#asList方法。

      String[][] array2D = { { "A", "B" }, { "C", "D" }, { "E", "F" } };
          List<List<String>> arrayList2D = new ArrayList<List<String>>();
          for (int i = 0; i < array2D.length; i++) {
              List<String> eachRecord = Arrays.asList(array2D[i]);
              arrayList2D.add(eachRecord);
          }
          System.out.println(arrayList2D);
      

答案 1 :(得分:2)

结果为空的原因是第eachRecord.clear();行从结果列表 arrayList2D 中删除了引用。这里的一个简单解决方案可能是用eachRecord = new ArrayList<String>();

替换该行

同时使用j<array2D[1]更改j<array2D[i]以便正常使用。

答案 2 :(得分:1)

您可以使用Arrays#asList方法

转换2D数组
// Initialize the array to the correct size :)
List<List<String>> arrayList2D = new ArrayList<>(array2D.length);

for (String[] record : array2D) {
    arrayList2D.add(Arrays.asList(record));
}