稀疏数组
稀疏数组
-
定义:稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组
如: 11X11
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 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其稀疏数组形式:
行 列 值 11 11 2 1 2 1 2 4 2 -
优点:压缩存储可以节省存储空间以避免资源的不必要的浪费,在数据序列化到磁盘时,压缩存储可以提高IO效率
-
代码实现
//1. 创建一个二维数组11X11 0:没有数据,1:有数据 int[][] nums = new int[11][11]; nums[1][2] = 1; nums[2][3] = 2; //输出原始值 for (int[] num : nums) { for (int i : num) { System.out.print(i+"\t"); } 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. 转化为稀疏数组,获取有效值 int sum = 0; for (int i = 0; i < 11; i++) { for (int j = 0; j < 11; j++) { if (nums[i][j]!=0){ sum++; } } } System.out.println("有效值的个数"+sum); // 有效值的个数2 //3.创建一个稀疏数组 int[][] numsXs = new int[sum+1][3]; numsXs[0][0] = 11; numsXs[0][1] = 11; numsXs[0][2] = sum; //遍历二维数组,将非零的值传入 int count = 0; for (int i = 0; i < nums.length; i++) { for (int j = 0; j < nums[i].length; j++) { if (nums[i][j]!=0){ count++; numsXs[count][0] = i; numsXs[count][1] = j; numsXs[count][2] = nums[i][j]; } } } //4.输出稀疏数组 for (int[] x : numsXs) { for (int i : x) { System.out.print(i+"\t"); } System.out.println(); } // 11 11 2 1 2 1 2 3 2

浙公网安备 33010602011771号