-
基本介绍
- 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组
-
处理方法
- 第一行:记录数组 一共有几行几列,有多少个不同的值
- 第二行以后:把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
-
代码实现
-
public static void main(String[] args) { // 构建原始数组(并赋值初始值,假设大量的默认值为0) int[][] originalArray = new int[11][11]; originalArray[1][2] = 1; originalArray[2][3] = 2; originalArray[3][4] = 2; System.out.println("原始数组"); for (int[] ints : originalArray) { for (int anInt : ints) { System.out.printf("%d ", anInt); // 格式化输出 } System.out.println(); } // 构建稀疏数组 int sum = 0; // 其他值的个数(重复值应不应该算) for (int[] ints : originalArray) { for (int anInt : ints) { if (anInt != 0) { sum++; } } } int[][] sparseArray = new int[sum + 1][3]; // 第一行 原始数组行数,原始数组列数,其他值的个数 sparseArray[0][0] = 11; sparseArray[0][1] = 11; sparseArray[0][2] = sum; // 每个其他值对应原始数组的行号,列号,值 int row = 1; for (int i = 0; i < originalArray.length; i++) { for (int j = 0; j < originalArray[i].length; j++) { if (originalArray[i][j] != 0) { sparseArray[row][0] = i; sparseArray[row][1] = j; sparseArray[row][2] = originalArray[i][j]; row++; } } } System.out.println("稀疏数组"); for (int[] ints : sparseArray) { System.out.printf("%d %d %d ", ints[0], ints[1], ints[2]); // 格式化输出 } // 将稀疏数组转换成原始数组 int[][] originalArray1 = new int[sparseArray[0][1]][sparseArray[0][1]]; for (int i = 1; i < sparseArray.length; i++) { originalArray1[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; } System.out.println("恢复的原始数组"); for (int[] ints : originalArray1) { for (int anInt : ints) { System.out.printf("%d ", anInt); // 格式化输出 } 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 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 稀疏数组 11 11 3 1 2 1 2 3 2 3 4 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 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