我从事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;
}
}
它们似乎以相同的方式初始化,但是有人告诉我第一种方法更好,但是我不知道为什么。谢谢您的回答!
答案 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
具有固定尺寸(matrix
和rows
)时,第二种方法允许一步创建和初始化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 = 2
和columns = 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];
我更喜欢最后一个,因为这是最简单的。