【问题标题】:full one-dimensional array in a two-dimensional array java二维数组java中的完整一维数组
【发布时间】:2016-01-09 09:28:03
【问题描述】:

我正在尝试在 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;
}

编辑: 我不打算重用 data-Array 我想将 result-array 中第一列的引用设置为数据-array . 有可能吗?如果是,我该怎么做?

【问题讨论】:

  • 我觉得不错
  • 我不明白,你想将一维数组转换为具有特定行大小的二维数组?如果数组长度不能被行大小整除怎么办?例如,您有一个长度为 16 的 1d 数组。您将行大小设置为 7。元素 0-6 位于第一行,7-13 位于第二行,14-15 位于第三行,并且您有 5“空" 单元格。
  • 如果代码正常工作,您应该将其发布到我们的堆栈成员 [codereview](codereview.stackexchange.com/questions)
  • 是应用需求,我会在5个空单元格中做一些操作。
  • @davejal 好的,我会的:)

标签: java arrays


【解决方案1】:

我不知道这在您的应用程序/上下文中是否有意义,但出于性能原因,您通常应该在内存中尽可能接近一致的数据
对于数组 (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-Array。因为如果你不重复使用它,你可以像这样result数组中第一行的引用设置为data-Array

result[0] = data;

同样,这又为您带来了巨大的性能提升。
为什么?仅仅是因为您不需要通过复制所有值来使用不必要的大量内存 - 而且您可能知道,内存分配可能相当慢。
所以总是重复使用内存而不是疯狂地复制它。

所以我的完整建议是使用以下代码:

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

是否设置columnSize是可选的。

【讨论】:

  • 不可能应用第一点它不适合我的应用程序,第二点正是我想要做的(我不会重复使用数据数组)但我想要将结果数组中第一列(不是行)的引用设置为数据数组。这可能吗?如果是,我该怎么做? (我要更新问题)
  • 恐怕那是不可能的。
猜你喜欢
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多