JAVA数组05:稀疏数组

稀疏数组个人理解

  • 打印出一个二维数组
 // 定义长度为5的二位数组
        int[][] arrayNum1 = new int[5][5];
        // 给任意数组内数组赋值,数组以索引0为初始
        arrayNum1[3][2] = 9;
        arrayNum1[2][3] = 7;

    /*  索引         0       1       2       3      4
                  第一列  第二列  第三列  第四列  第五列
        0  第1行    0       0       0       0      0
        1  第2行    0       0       0       0      0
        2  第3行    0       0       0       7      0
        3  第4行    0       0       9       0      0
        4  第5行    0       0       0       0      0
    */

        // 遍历该数组
        for (int[] array : arrayNum1) {
            for (int arrays : array) {
                System.out.print(arrays + " ");
            }
            System.out.println();
        }

输出得到:

0 0 0 0 0 
0 0 0 0 0 
0 0 0 7 0 
0 0 9 0 0 
0 0 0 0 0 
  • 将二位数组转为稀疏数组
      // 定义一个变量记录数组内值有多少个
      int valueSum = 0;
      // 遍历行数
      for (int i = 0;i < arrayNum1.length;i++ ){
          // 遍历列数
          for (int j = 0;j <arrayNum1.length;j++){
              // 判断当第几行几列有值时,则记录值数的变量加1
              if (arrayNum1[i][j] != 0){
                  valueSum ++;
              }
          }
      }
        
      /*  大量重复单一的值我们可以以稀疏数组进行保存
       稀疏数组样式,也就是说以上数组转为稀疏数组后,总共有5行,5列,两个值
       第一个值在一维数组索引为3,二维数组索引为2中
       第二个值在一维数组索引为2,二维数组索引为3中
                     行(rows)  列(cols)  值(value)
      * 记录总数组    5         5         2
      * 第一个值      3         2         9
      * 第二个值      2         3         7
        转为稀疏数组首先应记录总行总列及值有多少个
      */

      // 定义一个稀疏数组,第一个[]代表行,第二个[]代表列,行有头部行及值的行数,即值的数量+1
      int[][] arrayNum2 = new int[valueSum+1][3];
      // 给数组初始化赋值
      arrayNum2[0][0] = 5;
      arrayNum2[0][1] = 5;
      arrayNum2[0][2] = valueSum;

      // 遍历二位数组将有效值(非零的值)赋给稀疏数组
      // 定义一个变量,代表二维数组中非零值的个数
      int count = 0;
      // 外部循环遍历行数(二维数组第一层数组,也就是第一个[];
      for (int i = 0;i < arrayNum1.length;i++){
         // 内层循环遍历列数(二维数组中数组中的数组...[][])
          for (int j = 1;j < arrayNum1[i].length;j++){
              // 当数组中的数组有值时,记录值个数的变量加1
              if (arrayNum1[i][j] != 0){
                  count++;
                /* 将得出的值赋给稀疏数组,值的个数代表行数,假如有两个有效值,则行数有:有效值+1
                                        行[cuont] 列[j]  值[i][j]
                         * 记录总数组    5         5      2
                         * 第一个值      3         2      9
                         * 第二个值      2         3      7
                */
                  arrayNum2[count][0] = i; // 横坐标,count表示第几行存
                  arrayNum2[count][1] = j; // 纵坐标,表示第几列存
                  arrayNum2[count][2] = arrayNum1[i][j]; // 赋值
              }
          }
      }
      System.out.println("稀疏数组为:");
      // 遍历稀疏数组并打印
      for (int[] num : arrayNum2){
          for (int nums : num){
              System.out.print(nums+" ");
          }
          System.out.println();
      }

输出得到:

稀疏数组为:
5 5 2 
2 3 7 
3 2 9
  • 将稀疏数组转为二维数组
      // 将稀疏数组转为二维数组,总共有5行5列
      // arrayNum2[0][0],代表稀疏数组的第一个元素,为行数
      // arrayNum2[0][1],代表稀疏数组的第二个元素.为列数
      int[][] arrayNum3 = new int[arrayNum2[0][0]][arrayNum2[0][1]];
      // 遍历稀疏数组有效值个数,将值赋给二维数组
      for (int i = 1;i <= count ;i++){
          arrayNum3[arrayNum2[i][0]][arrayNum2[i][1]] = arrayNum2[i][2];
      }
      // 打印
      System.out.println("稀疏数组转为二位数组:");
      for(int[] num : arrayNum3){
          for (int nums : num){
              System.out.print(nums+" ");
          }
          System.out.println();
      }

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值