1

我有这个名为bands的三维数组。我需要做 4 个副本,这样我就可以与所有这些副本并行工作。

int bands[][][] = new int[param][][];

我需要数组保持为一个三维数组,因为它是某些需要的方法的输入int [][][]

我怎么能做这样的副本?我正在考虑使用这样的arrayList:

List<Integer[][][]> bandsList = new ArrayList<Integer[][][]>();

bandsList.add(bands);

但我在最后一行收到此错误:add(Integer[][][])类型List<Integer[][][]>中的方法不适用于参数(int[][][])

所以我该怎么做??

4

2 回答 2

1

错误是因为int[][][]不一样Integer[][][]

int[][][]是一个原始的 3D 数组 int

Integer[][][]object 的 3D 数组 Integer,它是 的包装类int

嗯,从技术上讲,3D 数组是指向 2D 数组的指针数组,2D 数组是指向 1D 数组的指针数组,1D 数组是基元数组或指向对象的指针。

改为使用List<int[][][]> bandsList = new ArrayList<int[][][]>();

另请注意

bandsList.add(bands);
bandsList.add(bands);

只需将 2 个指针添加到同一个数组,更改一个也会更改另一个。

您需要手动复制它们:

int[][][] getCopy(int[][][] bands)
{
  int[][][] newBands = new int[bands.length][][];
  for (int i = 0; i < bands.length; i++)
  {
    newBands[i] = new int[bands[i].length];
    for (int j = 0; j < bands[i].length; j++)
    {
      newBands[i][j] = new int[bands[i][j].length];
      System.arraycopy(bands, 0, newBands, 0, bands[i][j].length))
    }
  }
  return newBands;
}

// to add
bandsList.add(getCopy(bands));
于 2013-02-17T14:58:07.527 回答
0

这样你就不会复制数组,你必须这样做 4 次:

    int cloneList[][][] = new int[param][..][..];
    for(int i = 0; i<bands.length; i++) {
       int arr1[][] = bands[i];
       for(int j = 0; j<arr1.length; j++) {
           int arr2[] = arr1[j];
           for(int k = 0; k<arr2.length; k++) {
               int x = arr2[k];
               cloneList[i][j][k] = x;
           }
       }
    }
于 2013-02-17T15:06:42.203 回答