我试图用Java中的二维数组填充一维数组。 我用这种方式做到了,还有另外一种比这更好的方法吗?
maven-dependency-plugin
编辑:我不会重复使用数据 -Array我想在结果 -array中设置第一列的引用数据 -array。有可能吗?如果是的话,我该怎么做?
答案 0 :(得分:0)
我不知道这在您的应用程序/上下文中是否有意义,但出于性能原因,您通常应该尽可能将连贯的数据放在内存中。
对于数组(double[row][column]
),这意味着具有相同row
值的数据通常非常靠近地存储在内存中。例如,如果您有一个像double[][] d = double[10][10]
这样的数组并保存两个值,例如d[0][0] = 1.0; d[1][0] = 2.0;
,那么它们(我认为) 40个字节相互远离。
但是当你像d[0][0] = 1.0; d[0][1] = 2.0;
一样保存它们时,它们会直接在内存中紧挨着,并且通常会同时加载到超高速缓存中。如果你想迭代地使用它们,那么这是一个巨大的性能提升。
因此,对于您的应用程序,第一个改进是:
public double[][] getResult(double[] data, int rowSize) {
int columnSize = data.length;
double[][] result = new double[rowSize][columnSize];
for (int i = 0; i < columnSize; i++) {
result[0][i] = data[i];
}
return result;
}
其次,您必须考虑是否要重新使用data
- 数组。因为如果您不能重复使用它,您只需将result
数组中第一行的引用设置为data
- 数组像这样:
result[0] = data;
同样,这会给你带来另一个巨大的性能提升
为什么?好吧,因为你不需要通过复制所有值来使用不必要的大量内存 - 而且你可能知道,内存分配可能相当慢。
所以总是重复使用内存而不是疯狂地复制内存。
所以我的完整建议是使用此代码:
public double[][] getResult(double[] data, int rowSize) {
double[][] result = new double[rowSize][];
result[0] = data;
return result;
}
是否设置columnSize
是可选的。