0

这是我最近得到答案的一个问题(这里)之后的一个概念性问题。我将使用一个 java 示例来演示我的问题,但我认为这应该适用于其他类似的语言(我不能肯定地说 - 希望有人可以证实这一点或说其他话)。基本上我想知道以下可能的用途之间是否存在任何细微差别(考虑到它们的初始化方式):

double[] array1D = new double[max]

double[][] array2D = new double [max][1]

假设我们将第二个数组初始化为只有一列,那么一维数组真的需要存在吗?它是否具有 2D 阵列所没有的任何品质,还是只是用来迷惑像我这样的可怜的灵魂?此外,我想知道是否array2D只有一列可以做任何不能做的事情array1D

4

6 回答 6

2

array1D 和 array2D 之间的主要区别在于后者中的行(或列,但是您想查看它)是可以独立于整个数组使用的单个对象。

例如,您可以将整行传递给函数,并且允许该函数修改该行。要使用一维数组实现相同的效果,您必须传递原始数组、数组中行的起始索引和行的长度。

对对象的每个引用都需要 4 个字节,因此每个元素的内存使用量会增加 4 个字节,因此将 2D 数组用于 1D 数组可以做的事情是浪费内存。

于 2013-02-15T07:55:04.597 回答
1

new double[max] 创建一个双精度数组(以 0.0 初始化),其中 lengh = max

new double [max][1] 创建一个指针数组,每个指针都指向一个双精度数组,其中一个元素 = 0.0

于 2013-02-15T07:46:18.280 回答
1
int A[2][3]={{1,2,3},{4,5,6}};

一个二维数组存储在内存中,如下所示。第 0 行中的条目首先存储,然后是第 1 行,依此类推。

在此处输入图像描述

二维数组被表示为一个连续的 n 个块,每个块的大小为 m(即每个块中可以保存 m 个整数(或任何数据类型))。条目存储在内存中,如上所示。这里n代表行数,m代表列数。

在 Java 中:

与所有数组一样,必须使用 new 关键字为数组分配内存。例如,

 int[][] a = new int[2][4];

这个二维数组将有两行和四列。这实际上分配了 3 个对象:一个由 2 个元素组成的一维数组来保存每个实际的行数组,以及两个由 4 个元素组成的一维数组来表示行的内容。

 +-----+    +-----+-----+-----+-----+
 |a[0] | -> | [0] | [1] | [2] | [3] |
 |     |    +-----+-----+-----+-----+    In Java two-dimensional arrays are implemented is a  
                                        one-dimensional array of one-dimensional arrays -- like this.
 +-----+
 |     |    +-----+-----+-----+-----+
 |a[1] | -> | [0] | [1] | [2] | [3] |
 +-----+    +-----+-----+-----+-----+

在你的情况下:

double[][] array2D = new double [max][1]

这实际上分配了 max+1 个对象:一个包含 max 元素的一维数组来保存每个实际的行数组,以及一个包含 1 个元素的 max 一维数组来表示行的内容。

如果我错了,请告诉我。

于 2013-02-15T07:49:26.730 回答
0

两者都会做同样的事情。此外,当您只需要一行时,您不需要创建二维数组。当您需要处理多个一维数组时,使用二维数组。

另外,我认为您需要以这种方式初始化二维以使其适用于一维数组

double[][] array2D = new double[1][max]
于 2013-02-15T07:43:27.920 回答
0

想象一下这是一维数组

1 2 3 4 5 6 7 8 9

这是二维数组

1
2
3
4
5
6
7
8
9
  1 2 3 4 5 6 7 8 9

基本上,二维数组可以存储比一维数组更多的数据,并且比一维数组更复杂

于 2013-02-15T07:44:21.017 回答
0

您似乎误解了数组具有二维是正常的。这不是真的。

在编程语言中,一维数组是常态,而二维和更高维的数组相当罕见(我不记得我上次在 Java 中使用它是什么时候)。

使用二维数组而不是一维数组是可能的,但它会模糊数组的含义并使访问数组元素更加复杂。

于 2013-02-15T07:45:26.373 回答