将ArrayList <double [] []>转换为double [] []

时间:2016-06-09 17:58:15

标签: java arrays arraylist

我有一个数组列表,其中每个元素都是double[1][3]列表。现在,如果数组列表包含n个成员,我希望我的输出是一个大小为double[n][3]的列表。根据{{​​3}}我尝试了以下内容:

ArrayList<double[][]> testArray = new ArrayList<double[][]>();
double [][] testList = new double[testArray.size()][];
for(double [][] temp : testArray){
    // temp is a list?                    
}

我也尝试了以下内容:

double [][] test = new double[testArray.size()][3];
test = testArray.toArray(test);

他们都不适合我。任何帮助将非常感激。感谢。

3 个答案:

答案 0 :(得分:2)

如果列表中的所有数组的第一个维度大小等于1,那么您可以尝试:

ArrayList<double[][]> testArray = new ArrayList<double[][]>();
int testArraySize = testArray.size();
double [][] testList = new double[testArraySize][];

for (int i = 0; i < testArraySize; i++) {
    testList[i] = testArray.get(i)[0];
}

我认为这很简单所以我只会对此发表评论:

get(i)[0]

这将从列表中获取i个元素,这是一个二维数组,然后调用[0]运算符,它访问我们想要复制到目标数组的第二维。这一切都要求列表中数组的第一个维度的大小等于一。

  

// temp是一个列表?

不,它是一个二维数组 - 它是一个列表元素。

由于toArray创建了一个数组,其中每个数组元素都是list中的元素,因此您的第二个代码段无法在这种情况下工作,因此将创建三维数组。但是,如果您使用该方法,那么您必须提供一维数组作为该方法的参数(而不是二维),因为toArray获取并返回一维数组。在你的情况下,这将是一维数组,其中每个元素都是一个二维数组,导致三维数组不是你想要的。

答案 1 :(得分:1)

你的for循环已经开始了。您现在需要的是将内容从temp复制到testList,如下所示:

List<double[][]> testArray = new ArrayList<double[][]>();
double [][] testList = new double[testArray.size()][];
int pos = 0;
for(double [][] temp : testArray){
    testList[pos++] = temp[0];
}

这会创建一个浅表副本。对testArray值的任何修改都将通过testList数组“可见”。

关于命名的注意事项: testArray实际上是一个列表,而testList实际上是一个数组。

答案 2 :(得分:0)

ArrayList<double[][]>():表示单维数组,其中每个元素都是双维数组。

有多个double[][]元素。

如果你想要一个元素,那么你可以用.get(index)方法获得它。

如果您想将ArrayList<double[][]>转换为double[][][],请稍微将代码更改为

double[][][] testList = new double[testArray.size()][][];
for(int i=0;i<testArray.size();i++){
   testList[i] = testArray.get(i);
}