C++和Java中的多维数组的区别
先决条件: C++中的多维数组,Java中的多维数组
多维数组:
多维数组是数组的表格表示形式,用于存储多个元素。这些维度可以是1D数组、2D数组等。多维数组在C++和Java中都可以使用,但其实现和一些属性是不同的。
C/C++中的实现:
在C++中,多维数组在内部被创建为一个巨大的线性数组。C++的语法将这个线性的内存块抽象成2维或3维的行为,从而使程序员更容易理解。
示例:
一个2行3列的 2D数组 {{9,45,51},{5,25,6}}的实现如下(假设整数占4个字节):
因此,特定索引的内部元素的内部公式为:
arr[rowIndex][colIndex] = arr + (rowIndex * noOfCols * sizeOfDataType) + coLIndex * sizeOfDataType
假设基地址为 3000 。那么 arr[1][1]= 3000+(1*3*4)+1*4*=3016
。
由于这种实现方式,每一行的列数必须相等,在声明时必须指定列的大小,以便正确访问元素。
以下是C++中多维数组的实现:
输出:
Java中的实现:
在Java中,多维数组被实现为数组的数组,其中基础数组的每个索引都指向一个完全不同的数组。因此, arr[rowIndex] 返回一个完整的单维数组, arr[rowIndex][coLIndex]
返回该单维数组中索引为 coLIndex 的元素。
示例:
维数为3行5列的 2D数组 的实现如下:
由于这种结构,Java可以有具有 不同列大小(甚至是空值)的2D数组 。
以下是Java中多维数组的实现:
输出