平时我们下五子棋的时候,会发现下的棋子和棋盘的空格会相差很大,那当我们使用二维数组来表示下棋这一种数据时会浪费很多无用的空间,这就引发出了稀疏数组这一种数据结构来压缩当二维数组中有很多默认值(这里为0)
如上图所示
注解:
1、第0行的数据为该稀疏数组所有的行数和列数;
2、从第1行开始,该数组存放在多少行,多少列,所在的值;
稀疏数组的转换如下图:
具体使用见如下代码:
package com.lmh.sparsearray;
public class SparseArray {
public static void main(String[] args) {
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
System.out.println("原始的二维数组");
for (int[] row : chessArr1) {
for (int data : row) {
System.out.print(data);
System.out.print(" ");
}
System.out.println();
}
int sum = 0;
for (int i = 0 ;i<11 ;i++){
for (int j = 0;j<11;j++){
if (chessArr1[i][j] != 0){
sum++;
}
}
}
System.out.println(sum);
int sparseArr[][] = new int[sum+1][3];
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
int count = 0;
for (int i = 0 ;i<11 ;i++){
for (int j = 0;j<11;j++){
if (chessArr1[i][j] != 0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
System.out.println();
System.out.println("得到的稀疏数组为:==");
for (int i = 0;i< sparseArr.length;i++){
System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],
sparseArr[i][1],
sparseArr[i][2]);
}
System.out.println();
int charssArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
charssArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
for (int[] row:charssArr2) {
for (int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}
欢迎大家指正不足