什么是稀疏数组?
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组保存数组中全部值的情况
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
如图:
稀疏数组第一行保存 二维数组有多少行多少列多少个值类型。
其它行保存 每一个值的信息 第几行,第几列,值。
应用
使用稀疏数组来保存二维数组 五子棋案例
1. 定义一个二维数组来表示棋盘的棋子信息
2. 把二维数组转成稀疏数组
//创建稀疏数组
int spareseArr[][] = new int[sum+1][3];
//设置稀疏数组第一行的值
spareseArr[0][0]=row;
spareseArr[0][1]=col;
spareseArr[0][2]=sum;//sum为二维数组的一共有多少个位置的值
//往稀疏数组中赋值
int spareseArrRow = 0;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (chessArr1[i][j] != 0){
spareseArrRow++;
spareseArr[spareseArrRow][0]=i;
spareseArr[spareseArrRow][1]=j;
spareseArr[spareseArrRow][2]=chessArr1[i][j];
}
}
}
3. 把稀疏数组转成二维数组
//把稀疏数组转变成二维数组
int diskChessArr[][] = new int[spareseArr[0][0]][spareseArr[0][1]];
//往二维数组加棋子数据
for (int i = 1; i < spareseArr.length; i++) {
diskChessArr[spareseArr[i][0]][spareseArr[i][1]] = spareseArr[i][2];
}
System.out.println("==把稀疏数组转成二维数组 ====");
for (int[] rows : diskChessArr) {
for (int data : rows) {
System.out.print(data+"\t");
}
System.out.println();
}