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++中多维数组的实现:
//C++程序的多维数组实现
#include <iostream>
using namespace std;
//驱动程序
int main()
{
//创建一个二维整数数组,维度:3行X5列
int arr[3][5]={
{23,56,34,52,63},
{40,20,96,43,97},
{75,51,10,82,43}
};
//遍历2D数组
cout <<"打印整个2d数组:" << endl;
//遍历行
for(int i=0;i<3;i++){
//遍历列
for(int j=0;j<5;j++){
cout <<"arr[" <<i<< "][" <<j
<<"]:"<<arr[i][j]
<<" ";
}
cout <<endl;
}
return 0;
}
输出:
打印整个2d数组:
arr[0][0]:23 arr[0][1]:56 arr[0][2]:34 arr[0][3]:52 arr[0][4]:63
arr[1][0]:40 arr[1][1]:20 arr[1][2]:96 arr[1][3]:43 arr[1][4]:97
arr[2][0]:75 arr[2][1]:51 arr[2][2]:10 arr[2][3]:82 arr[2][4]:43
Java中的实现:
在Java中,多维数组被实现为数组的数组,其中基础数组的每个索引都指向一个完全不同的数组。因此, arr[rowIndex] 返回一个完整的单维数组, arr[rowIndex][coLIndex]
返回该单维数组中索引为 coLIndex 的元素。
示例:
维数为3行5列的 2D数组 的实现如下:
由于这种结构,Java可以有具有 不同列大小(甚至是空值)的2D数组 。
以下是Java中多维数组的实现:
// Java多维数组实现的示例程序
import java.io.*;
class GFG {
// Driver代码
public static void main(String[] args)
{
// 创建一个2D整数数组
// 维度:3行x 5列
int[][] arr = {
{23, 56, 34, 52, 63},
{40, 20, 96, 43, 97},
{75, 51, 10, 82, 43}
};
// 遍历2D数组
System.out.println("Printing entire 2d array: ");
// 迭代每行
for (int i = 0;
i < arr.length; i++) {
// 迭代每列
for (int j = 0;
j < arr[i].length; j++) {
System.out.print(
"arr[" + i + "][" + j
+ "]:" + arr[i][j]
+ " ");
}
System.out.println();
}
System.out.println();
// 将arr[2]重新分配给另一个数组
// 在C ++中的2D数组中不可能这样做,而是指针数组
arr[2] = new int[] {82, 53, 64,
12, 45, 3};
// 再次遍历数组
System.out.println(
"Printing entire 2d array "
+ "after modification: ");
// 迭代每行
for (int i = 0;
i < arr.length; i++) {
// 迭代每列
for (int j = 0;
j < arr[i].length; j++) {
System.out.print(
"arr[" + i + "][" + j
+ "]:" + arr[i][j]
+ " ");
}
System.out.println();
}
}
}
输出
Printing entire 2d array:
arr[0][0]:23 arr[0][1]:56 arr[0][2]:34 arr[0][3]:52 arr[0][4]:63
arr[1][0]:40 arr[1][1]:20 arr[1][2]:96 arr[1][3]:43 arr[1][4]:97
arr[2][0]:75 arr[2][1]:51 arr[2][2]:10 arr[2][3]:82 arr[2][4]:43
Printing entire 2d array after modification:
arr[0][0]:23 arr[0][1]:56 arr[0][2]:34 arr[0][3]:52 arr[0][4]:63
arr[1][0]:40 arr[1][1]:20 arr[1][2]:96 arr[1][3]:43 arr[1][4]:97
arr[2][0]:82 arr[2][1]:53 arr[2][2]:64 arr[2][3]:12 arr[2][4]:45 arr[2][5]:3