Java矩阵初始化

时间:2019-02-22 14:57:27

标签: java matrix

我从事Java编程已有3年了,我知道如何初始化矩阵,但是我一直对两者之间的差异感到好奇

double[][] matrix = new double[rows][];
for (int i = 0; i < rows; i++) {
    matrix[i] = new double[columns];
    for (int j = 0; j < columns; j++) {
        matrix[i][j] = 0.0d;
    }
}

还有这个

double[][] matrix = new double[rows][columns];
for (int i = 0; i < rows; i++) {
    for (int j = 0; j < columns; j++) {
        matrix[i][j] = 0.0d;
    }
}

它们似乎以相同的方式初始化,但是有人告诉我第一种方法更好,但是我不知道为什么。谢谢您的回答!

3 个答案:

答案 0 :(得分:0)

我认为不能将一种方法严格归类为另一种方法。您将根据使用情况使用两个。

例如,第一种方法的好处:您可以使matrix的列大小不同。同样,matrix初始化被延迟(未分配内存)。例如:

double[][] matrix = new double[2][]; // memory is not allocated yet
matrix[0] = new double[] {1.0};
matrix[1] = new double[] {1.0, 2.0};

另一方面,当您知道matrix具有固定尺寸(matrixrows)时,第二种方法允许一步创建和初始化columns

double[][] matrix = new double[2][2]; // memory is allocated for double 2x2 matrix

答案 1 :(得分:0)

当在它们的声明语句之后打印两个数组时,一个原因很明显:

第一个打印[null, null],第二个打印[[0.0, 0.0, 0.0], [0.0, 0.0, 0.0]](经rows = 2columns = 3测试)

第一个仅在内部数组可用时初始化内部数组,而第二个仅使用零(double的默认值)创建并初始化这些内部数组。这种差异本质上与创建对象的时间有关(以及创建对象对内存使用的影响)。对于小型阵列,这种差异可能可以忽略不计。

此外,内部数组的长度不需要相同,因此:

  • double[][] matrix = new double[rows][columns]强制所有内部数组的长度为columns
  • double[][] matrix = new double[rows][]允许您将new double[12]添加到外部数组,因此内部数组可以具有不同的长度。

答案 2 :(得分:0)

实际上,两种方法都过分膨胀, 因为使用double[]初始化0.0子数组 已经隐式完成。 因此,您无需明确地执行此操作。

因此,您可以这样编写它,并且仍然具有相同的效果:

double[][] matrix = new double[rows][];
for (int i = 0; i < rows; i++) {
    matrix[i] = new double[columns];
}

double[][] matrix = new double[rows][columns];

我更喜欢最后一个,因为这是最简单的。