稀疏数组

稀疏数组

  • 定义:稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组

    如: 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
    
posted @ 2021-04-08 14:54  saxon宋  阅读(94)  评论(0)    收藏  举报