稀疏数组
稀疏数组是当数组中存在大量无效元素时,可以用稀疏数组来保存,节省空间。
场景:
1)压缩数据
2)保存棋盘,地图等
将二维数组转换为稀疏数组:
1)遍历获取有效值个数sum
2)创建一个行数为sum+1,列数为3的二维数组
3)第一行第一列为原数组行数,第一行第二列为原数组列数,第一行第三列为有效值个数
4)遍历原数组,保存各有效值的行数、列数、值
将稀疏数组转换为二维数组:
1)根据稀疏数组第一列创建相应大小的二维数组
2)遍历稀疏数组,将有效值放回数组中
代码如下:
1 public class SparseArray { 2 public static void main(String[] args) { 3 int chessArr1[][] = new int[11][11]; 4 chessArr1[1][2] = 1; 5 chessArr1[2][3] = 2; 6 chessArr1[4][5] = 2; 7 System.out.println("Original binary array~"); 8 for (int[] row : chessArr1) { 9 for (int data : row) { 10 System.out.printf("%d\t", data); 11 } 12 System.out.println(); 13 } 14 15 int sum = 0; 16 for (int i = 0; i < 11; i ++) { 17 for (int j = 0; j < 11; j ++) { 18 if (chessArr1[i][j] != 0) { 19 sum ++; 20 } 21 } 22 } 23 24 int sparseArray[][] = new int[sum + 1][3]; 25 sparseArray[0][0] = 11; 26 sparseArray[0][1] = 11; 27 sparseArray[0][2] = sum; 28 int count = 0; 29 for (int i = 0; i < 11; i ++) { 30 for (int j = 0; j < 11; j ++) { 31 if (chessArr1[i][j] != 0) { 32 count++; 33 sparseArray[count][0] = i; 34 sparseArray[count][1] = j; 35 sparseArray[count][2] = chessArr1[i][j]; 36 } 37 38 } 39 } 40 System.out.println("SparsArray~~~~"); 41 for (int i = 0; i < sparseArray.length; i ++) { 42 System.out.printf("%d\t%d\t%d\t\n", sparseArray[i][0], sparseArray[i][1], sparseArray[i][2]); 43 } 44 System.out.println(); 45 46 int chessArr2[][] = new int[sparseArray[0][0]][sparseArray[0][1]]; 47 for (int i = 1; i < sparseArray.length; i ++) { 48 chessArr2[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; 49 } 50 System.out.println("array recover~~~"); 51 for (int[] row : chessArr2) { 52 for (int data : row) { 53 System.out.printf("%d\t", data); 54 } 55 System.out.println(); 56 } 57 58 } 59 }
思考:
遍历两次感觉有点繁琐,但是网上查找资料好像没有提到这一点的,留着这个问题如果后续又找到答案回来解答。

浙公网安备 33010602011771号