稀疏数组可以有效的减少内存与空间,存储较大数组的信息。
1,创建一个11行11列的五子棋盘
//创建一个11行11列的五子棋盘,并赋2个值,代表黑子与白子
int[][] array1 =new int[11][11]
array1 [5][7]=1;
array1 [6][8]=2;
System.out.println("原始数据:");
//进行数组的遍历,打印出完整的棋盘
//棋盘的行作为外层循环数,列作为内层循环数
for(int[] ints : array1){
for (int anints : ints){
System.out.print(anints + "\t");
}
System.out.println();
}
//输出结果
原始数据:
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 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
2、获取数组中的有效值个数,并创建出稀疏数组
//遍历棋盘(二维数组),获取数组中有效值的个数作为稀疏数组的第三位
for (int i =0;1<11;i++){
for(int j=0;j<11;j++){
//如果遍历数组时有值不为0,则 sum+1
if(array1[i][j] !=0){
sum++;
}
}
System.out.println("有效个数:" + sum);
//创建与棋盘想对应的稀疏数组,sum+1作为稀疏数组的行,列为固定的三列。(sum 为何要加一:因为稀疏数组的第一行记录的是棋盘的值信息,所以要多出一行)
int [][] array2 =int[sum +1][3];
//设置数组的第一行
array2[0][0]=11;
array2[0][1] = 11;
array2[0][2] = sum;
//遍历二维数组,将棋盘中非0的值存放在稀疏数组中
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
//每一行 i 为一个外层循环数,每一列j为内层循环数进行遍历
if (array[i][j] != 0) {
//count作为稀疏数组的行,列是固定的
count++;
array2[count][0] = i;
array2[count][1] = j;
array2[count][2] = array[i][j];
}
}
}
System.out.println("输出稀疏数组");
//以行数为条件进行遍历输出
for (int i = 0; i < array2.length; i++) {
System.out.println(array2[i][0] + "\t" +
array2[i][1] + "\t" +
array2[i][2] + "\t");
}
//输出结果
有效个数:2
输出稀疏数组
11 11 2
5 7 1
6 8 2
3、将稀疏数组还原为原始的棋盘
//1、读取稀疏数组,将array2的第一行前两列作为array3的总行列数
int [][] array3 =new int[ array2[0][0] ] [ array2[0][1] ];
//2、还原稀疏数组
//将稀疏数组的行数作为遍历的次数,列固定不变。array2中每列的第3个数作为array3的相对应位置的值。稀疏数组中每行的前两个列作为array3的行和列
for (int i = 1; i < array2.length; i++) {
array3[array2[i][0]][array2[i][1]] = array2[i][2];
}
for (int[] ints : array3) {
for (int anints : ints) {
System.out.print(anints + "\t");
}
System.out.println();
}
//输出原始的棋盘
还原稀疏数组
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 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