繁体   English   中英

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

[英]full one-dimensional array in a two-dimensional array java

我正在尝试用Java在二维数组中填充一维数组。 我是用这种方法做到的,还有没有比这更好的方法了?

public double[][] getResult(double[] data, int rowSize) {
    int columnSize = data.length;
    double[][] result = new double[columnSize][rowSize];
    for (int i = 0; i < columnSize; i++) {
        result[i][0] = data[i];
    }
    return result;
}

编辑:我不打算重复使用数据 -阵列我想设置第一列的结果 -阵列的参照数据 -阵列。就是这可能吗? 如果是,我该怎么做?

我不知道这在您的应用程序/上下文中是否有意义,但是出于性能方面的考虑,通常应该在内存中尽可能紧密地保持一致的数据
对于数组( double[row][column] ),这意味着具有相同row值的数据通常非常紧密地存储在内存中。 例如,当您有一个类似double[][] d = double[10][10]并保存两个值,例如d[0][0] = 1.0; d[1][0] = 2.0; d[0][0] = 1.0; d[1][0] = 2.0; ,那么它们(我认为)彼此相距40个字节
但是当您保存它们时,就像d[0][0] = 1.0; d[0][1] = 2.0; 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 -Array。 因为如果您不重复使用它,则可以将result Array中第一行的引用设置 data -Array,如下所示:

result[0] = data;

同样,这又给您带来了巨大的性能提升。
为什么? 好吧,仅仅是因为您不需要通过复制所有值来使用不必要的过多内存-并且您可能知道,内存分配可能会很慢。
因此,请始终重用内存,而不是随意复制内存。

因此,我的完整建议是使用以下代码:

public double[][] getResult(double[] data, int rowSize) {
    double[][] result = new double[rowSize][];
    result[0] = data;
    return result;
}

是否设置columnSize是可选的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM