public static void main(String[] args) {
//稀疏数组。就是将数据进行压缩。比如将二维数组11*11压缩n*3的数组其中n表示有效的数据个数
int chessArra[][] = new int[11][11];
chessArra[1][2] = 1;
chessArra[2][3] = 2;
//输出原始二维数组
for (int[] row: chessArra) {
for (int dat: row) {
System.out.printf("%d\t", dat);
}
System.out.println();
}
//下面我们对数组进行压缩通过稀疏数组的方式
//思路:先便利数组,得到有效数据个数
int sum = 0;//记录有效数据的个数
for (int i = 0; i < 11; i++){
for (int j = 0; j < 11; j++) {
if (chessArra[i][j] != 0) {
sum++;
}
}
}
System.out.println(sum);
int sparseArray[][] = new int[sum + 1][3];
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = sum;
//便利二维数组将数据放到稀疏数组中去
int count = 0;//二维数组的行
for (int i = 0; i < 11; i++){
for (int j = 0; j < 11; j++) {
if (chessArra[i][j] != 0) {
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = chessArra[i][j];
}
}
}
//输出稀疏数组
System.out.println("得到稀疏数组为==========");
System.out.println(sparseArray.length);
for (int i = 0; i < sparseArray.length; i++) {
System.out.printf("%d\t%d\t%d\t\n", sparseArray[i][0], sparseArray[i][1], sparseArray[i][2]);
}
//将稀疏数组还原为原来的二维数组
int chessArra1[][] = new int[sparseArray[0][0]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i++) {
int row = sparseArray[i][0];
int coll = sparseArray[i][1];
int val = sparseArray[i][2];
chessArra1[row][coll] = val;
}
//恢复后的二维数组
System.out.println("恢复后的二维数组================");
for (int[] row:chessArra1) {
for (int data:row) {
System.out.printf("%d\t", data);
}
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 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
2
得到稀疏数组为==========
3
11 11 2
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
Process finished with exit code 0