从一个场景来分析,为什么需要稀疏数组!
二维数组
我们以一个二维数组模拟五子棋为例,用二维数组模拟创建一个棋盘,数字1代表黑子,二代表白子。在某些场景下,我们需要保存游戏的进度,如果采用原始的二维数组的方式进行保存的话,我们可以看见存储量是非常大的。
所以,当我们采用稀疏数组进行存储后是这个样子的:
我们可以看出稀疏数组给我们节约了相当一部分的空间。
定义
稀疏数组也是一个数组,可以把它看成是一个普通数组的压缩。(一般情况下我们认为如果一个数组的无效数据量远大于有效数据的情况下,对数组进行压缩)
稀疏数组的存储
第一列 | 第二列 | 第三列 |
---|---|---|
原始数组的行数 | 原始数组的列数 | 原始数组有效数据的个数 |
原始数组非零位所作在行索引 | 原始数组非零位所在列索引 | 原始数组非零位的值 |
拿上述五子棋的例子来说:
原始二维数组,一共拥有11行,11列,有效数据的个数为2个
原始数组的第二行,第三列有一个有效数据1,它所对应的行索引为1,列索引为2,值为1。所以在稀疏数组中的存储为
11 | 11 | 2 |
---|---|---|
1 | 2 | 1 |
2 | 3 | 2 |
这样就将原始的二维数组压缩成了一个稀疏数组!
代码实现
1、创建一个二维数组
//创建一个原始的二维数组 11*11
//0:没有棋子,1:表示黑子,2:白子
int chessArr1[][]=new int[11][11];
chessArr1[1][2]=1;
chessArr1[2][3]=2;
System.out.println("原始的二维数组"