二维数组java中的完整一维数组

时间:2016-01-09 00:29:40

标签: java arrays

我试图用Java中的二维数组填充一维数组。 我用这种方式做到了,还有另外一种比这更好的方法吗?

maven-dependency-plugin

编辑:我不会重复使用数据 -Array我想在结果 -array中设置第一列的引用数据 -array。有可能吗?如果是的话,我该怎么做?

1 个答案:

答案 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是可选的。