基本上你只需要这样做:
for (int i = 0; i < ec.size(); i++) {
Double[] boxedRow = ec.get(i);
double[] unboxedRow = new double[boxedRow.length];
for (int j = 0; j < boxedRow.length; j++)
unboxedRow[j] = boxedRow[j];
ei[i] = unboxedRow;
}
您遇到了因装箱和拆箱而引起的问题。手动将 Doubles
拆箱为 doubles
,可以使我们将数组转换为正确的类型。
另一种解决方案是:
public ArrayList<Double[]> ec;
public Double[][] ei;
for (int i = 0; i < ec.size(); i++) {
ei[i] = ec.get(i);
}
我要补充的是,你现在的解决方案不是一个二维 ArrayList
;它是一个由 Double
数组组成的 ArrayList
。看起来你可能想做的是这样:
public ArrayList<ArrayList<Double>> ec;
public double[][] ei;
for (int i = 0; i < ec.size(); i++) {
ArrayList<Double> row = ec.get(i);
Double[] rowArray = row.toArray(new Double[row.size()]);
double[] unboxedRow = new double[rowArray.length];
for (int j = 0; j < rowArray.length; j++)
unboxedRow[j] = rowArray[j];
ei[i] = unboxedRow;
}
这可能是这样的:
public ArrayList<ArrayList<Double>> ec;
public Double[][] ei;
for (int i = 0; i < ec.size(); i++) {
ArrayList<Double> row = ec.get(i);
ei[i] = row.toArray(new Double[row.size()]);
}
最后,请注意当你实例化新的 Double[]
时,数组会初始化为 null
而不是 0
。如果你尝试以下操作,你将会得到一个 NullPointerException
,尽管它会编译通过。
Double[] boxedArray = new Double[1];
double unboxed = boxedArray[0]; // equiv to "double unboxed = null;"
你需要小心拆包,并确保正确处理空值。
clone
,它更快,无论是在输入还是运行时都如此 :) - Jason Sparc