何时用稀疏数组
棋盘案例
应用场景:如临时保存棋盘
public class SparseArray {
public static void main(String[] args){
//11*11棋盘
//0无子 1黑子 2白子
//创建棋盘数组chessArr1[11][11]
int chessArr1[][] = new int[11][11];
//记录棋子所在位置
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
//输出原始二维数组
System.out.println("原始的二维数组:");
//for遍历的一种方式
for(int[] row : chessArr1){
for(int data : row){
System.out.print(data + "\t");
}
System.out.println();
}
//转成稀疏数组
//sum为非0元素个数
int sum = 0;
//遍历chessArr1[11][11]
for(int i = 0; i < 11; i++){
for(int j = 0; j < 11; j++){
//判断每一个元素是否为0
if(chessArr1[i][j] != 0){
//统计非0的元素个数
sum++;
}
}
}
//稀疏数组 sparseArr[][]
//行数:sum + 1
//列数:3
int sparseArr[][] = new int[sum + 1][3];
//稀疏数组的第0行
sparseArr[0][0] = 11;//row
sparseArr[0][1] = 11;//column
sparseArr[0][2] = sum;//非0元素的个数
//count记录是第几个非0元素
int count = 0;
for(int i = 0; i < 11; i++){
for(int j = 0; j < 11; j++){
if(chessArr1[i][j] != 0){
count++;
//将非0元素的位置记录到数组sparseArr[][0]、sparseArr[][1]中
sparseArr[count][0] = i;
sparseArr[count][1] = j;
//将非0元素的值记录下来
sparseArr[count][2] = chessArr1[i][j];
}
}
}
//输出稀疏数组
System.out.println("稀疏数组:");
for(int i = 0; i <= count; i++){
System.out.print(sparseArr[i][0] + "\t");
System.out.print(sparseArr[i][1] + "\t");
System.out.println(sparseArr[i][2] + "\t");
}
//还原成二维数组
//行:sparseArr[0][0]
//列:sparseArr[0][1]
int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
//行从1开始,后面记录的都是非0元素的信息(行、列、值)
for(int i = 1; i < sparseArr.length; i++){
//行:sparseArr[i][0]
//列:sparseArr[i][1]
//值:sparseArr[i][2]
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
//输出原始二维数组
System.out.println("还原后的二维数组:");
for(int[] row : chessArr2){
for(int data : row){
System.out.printf(data + "\t");
}
System.out.println();
}
}
}
运行结果:
原始的二维数组:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 2 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
稀疏数组:
11 11 3
1 2 1
2 3 2
还原后的二维数组:
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0