二维数组的语法详解

二维数组

一、定义

int[][] array = {
	{11, 12, 13, 14, 15},
	{21, 22, 23, 24, 25},
	{31, 32, 33, 34, 35}
};

本质 : 数组里面存数组, int[ ][ ] ,每一个元素是一个一维数组

1. 初始化
// 方式一 : 静态初始化
int[][] arr = {{1,2},{3,4,5},{6}};
// 简写
int arr[][] = {{1,2},{3,4,5},{6}};

// 方式二 : 动态初始化
int[][] arr = new int[3][2]; // 全部默认值为 0

// 方式三 : 只指定行数, 不指定列数
int[][] arr = new int[3][];
arr[0] = new int[2];
arr[1] = new int[4];
arr[2] = new int

2. 获取长度
array.length; //获取行数 : 3
array[0].length; //获取第0行的列数 : 5
array[1].length; //获取第1行的列数 : 5 

3. 遍历二维数组
// 普通for循环
// 外层 i, 内层 j
for(int i = 0; i < array.length; i++){
	for(int j = 0; j < array[0].length ; j++){
		System.out.println(array[i][j]);	
	}
}
// 外层 j, 内层 i
for(int j = 0; j < array[0].length; j++){
	for(int i = 0; i < array.length; i++){
		System.out.println(array[i][j]);
	}
} 

//------------------------------------------------------

// 增强for
for(int[] row : array){
	for(int num : row){
		System.out.println(num);
	}
}

4. 内存图

二维数组内存图

局部性原理(空间局部性)

  • cpu 读取内存(速度慢)数据后,会将其放入高速缓存(速度快)当中,如果后来的计算再用到此数据,再缓存中能读到的话,就不必读内存了
  • 缓存的最小存储单位是缓存行(cache line),一般64bytes,一次读取的数据少了不划算,因此最少读 64 bytes 填满一个缓存行,因此读入某个数据时也会读取其临近的数据,这就是所谓空间局部性

5. 普通for遍历的俩种方式对比
  1. 外层 j , 内层 i

    每次把一整行数据加载进缓存,但是只用到一个数据块,其余的数据还没有被用到的时候,再缓存空间不足时就被别的数据行覆盖了,还要再去访问内存,浪费太多时间了

  2. 外层 i , 内层 j

    每次把一整行数据加载进缓存,下一次还需要用到这一次加载进来的数据,大大减少了读取时间,提高了效率

🚨 提示
因此我们一般使用外层 i , 内层 j 的普通for遍历

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值