当一个数组中大部分元素为0,或为同一个值的数组时,可以使用稀疏数组来保存,避免空间的浪费
package sparsearray;
public class SparseArray {
public static void main(String[] args) {
// 初始化十一行十一列的数组
int[][] chessArr = new int[11][11];
// 设置非零值
chessArr[1][2] = 1;
chessArr[2][3] = 2;
chessArr[4][5] = 2;
//输出原始数组
System.out.println("原始二维数组");
for(int[] row : chessArr) {
for(int data : row){
System.out.printf("%d\t",data);
}
System.out.println();
}
//计算非零值个数
int sum = 0;
for(int[] row : chessArr) {
for(int data : row){
if(data != 0) {
sum++;
}
}
}
//初始化稀疏数组
int sparseArr[][] = new int[sum + 1][3];
//稀疏数组第一行放原始数组信息(行数,列数,非零值个数)
int sparseArrRow = 1;
sparseArr[0][0] = chessArr.length;
sparseArr[0][1] = chessArr[0].length;
sparseArr[0][2] = sum;
//稀疏数组从第二行开始放非零值信息(行值,列值,数值)
for (int i = 0; i < chessArr.length; i++) {
for(int j = 0;j < chessArr[i].length;j++) {
if(chessArr[i][j] != 0) {
sparseArr[sparseArrRow][0] = i;
sparseArr[sparseArrRow][1] = j;
sparseArr[sparseArrRow][2] = chessArr[i][j];
sparseArrRow++;
}
}
}
//输出稀疏数组
System.out.println("开始输出稀疏数组");
System.out.printf("%s\t%s\t%s\t\n","行","列","值");
for(int[] row : sparseArr) {
for(int i:row) {
System.out.printf("%d\t",i);
}
System.out.println();
}
//从稀疏数组恢复原数组
int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for(int i = 1;i < sparseArr.length;i++) {
chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
//输出恢复后的数组
System.out.println("恢复的二维数组");
for(int[] row : chessArr) {
for(int data : row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
输出结果