java稀疏数组

稀疏数组

当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组来保存该数组。

稀疏数组的处理方式是:

  • 记录数组一共有几行几列,有多少个不同值

  • 把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模

如下图:

具体代码:

public class ArrayDemo3 {
   public static void main(String[] args) {
       //定义一个二维数组
       int[][] array1 = new int[11][11];
       array1[1][2]=1;
       array1[2][3]=2 ;
       //输出数组的原始数据
       System.out.println("输出原始的数组:");

       for (int[] ints : array1) {
           for (int anInt : ints) {
               System.out.print(anInt+"\t");
          }
           System.out.println();
      }


       //转换为稀疏数组保存
       //获取有效值的个数
       int sum = 0;
       for (int i = 0; i < 11; i++) {
           for (int j = 0; j < 11; j++) {
               if (array1[i][j]!=0){
                   sum++;
              }
          }
      }
       System.out.println("有效值的个数为:"+sum);


       //创建一个稀疏数组的数组
       //稀疏数组的行与列,由于需要一个统计行列的一条数据,所以需要+1,列数固定为3
       int[][] array2 = new int[sum+1][3];

       array2[0][0] = 11;//稀疏数组中的第一行第一列
       array2[0][1] = 11;//稀疏数组中的第一行第二列
       array2[0][2] = sum;//稀疏数组中的第一行第三列

       //遍历二位数组,将非零的值,存放在稀疏数组当中
       int count = 0;
       for (int i = 0; i < array1.length ; i++) {
           for (int j = 0; j < array1[i].length; j++) {
               //判断是否为有效数值,
               if (array1[i][j]!=0){
                   count++;
                   array2[count][0] = i;//稀疏数组中的第二行第一列
                   array2[count][1] = j;//稀疏数组中的第二行第一列
                   array2[count][2] = array1[i][j];//稀疏数组中的第二行第一列
              }
          }
      }
       System.out.println("稀疏数组为:");
       System.out.println("行\t列\t值");

       for (int i = 0; i < array2.length; i++) {
           System.out.println(array2[i][0]+"\t"+array2[i][1]+"\t"+array2[i][2]+"\t");
      }

       
       System.out.println("还原成二维数组:");
       //读取稀疏数组
       int[][] array3 = new int[array2[0][0]][array2[0][1]];//读取稀疏数组的行列,并形成新的二维数组

       //给其中的元素还原它的值
       //遍历稀疏数组
       for (int i = 1; i < array2.length; i++) {//由于稀疏数组第一行为几行几列,因此i从1开始
           array3[array2[i][0]][array2[i][1]]  =  array2[i][2];//新数组[行][列]=数值
      }
       //输出
       System.out.println("输出还原的数组:");
       for (int[] ints : array3) {
           for (int anInt : ints) {
               System.out.print(anInt+"\t");
          }
           System.out.println();
      }
  }
}
 
posted @   默夔然  阅读(287)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示