三维整数向量的arraylist

时间:2013-02-17 14:37:11

标签: java

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

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

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

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

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

bandsList.add(bands);

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

那我该怎么办?

2 个答案:

答案 0 :(得分:1)

错误是因为int[][][]Integer[][][]不同。

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

Integer[][][]是一个对象的3D数组 Integer,它是int的包装类。

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

改为使用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));

答案 1 :(得分: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;
           }
       }
    }