数组
稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
处理方法
记录数组一共有几行几列,有多少个不同的值.
把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模.
第一行来记录原先二维数组的几行几列,有多少个不同的值.
第二行开始记录原先数组中的所有值.
应用实例
使用稀疏数组,来保留类似前面的二维数组(棋盘、地图等等).
把稀疏数组存盘,并且可以从新恢复原来的二维数组数.
整体思路分析:
代码实现
//稀疏数组 场景:五子棋存盘退出和续上盘的功能
public class SparseArray {
public static void main(String[] args) {
//创建原始二维数组 11*11 0为空 1为黑棋 2为白棋
int[][] chessArray = new int[11][11];
chessArray[1][2]=1;
chessArray[2][3]=1;
chessArray[3][4]=2;
chessArray[4][5]=2;
//展示原始二维数组
System.out.println("展示原始二维数组");
show(chessArray);
int count=0;
for (int[] row : chessArray) {
for (int data : row) {
if (data!=0)
count+=1;
}
}
int[][] chessSparseArray = new int[count + 1][3];
chessSparseArray[0][0]=chessArray.length;
chessSparseArray[0][1]=chessArray[1].length;
chessSparseArray[0][2]=count;
int sum=1;
for (int i = 0; i < chessArray.length; i++) {
for (int j = 0; j < chessArray[i].length; j++) {
if (chessArray[i][j] != 0) {
chessSparseArray[sum][0] = i;
chessSparseArray[sum][1] = j;
chessSparseArray[sum][2] = chessArray[i][j];
sum+=1;
}
}
}
//展示稀疏数组
System.out.println("展示稀疏数组");
show(chessSparseArray);
int[][] chessArrayAgain = new int[chessSparseArray[0][0]][chessSparseArray[0][1]];
for (int i = 1; i <= chessSparseArray[0][2]; i++) {
chessArrayAgain[chessSparseArray[i][0]][chessSparseArray[i][1]]=chessSparseArray[i][2];
}
//展示恢复后的二维数组
System.out.println("展示恢复后的二维数组");
show(chessArrayAgain);
}
public static void show(int[][] chessArray) {
for (int i = 0; i < chessArray.length; i++) {
for (int j = 0; j < chessArray[i].length; j++) {
System.out.printf("%d\t",chessArray[i][j]);
}
System.out.println();
}
}
}