稀疏数组与二维数组相互转换(Java)

本文介绍如何在Java中使用稀疏数组技术处理11x11的数组,通过记录非零元素的位置和值,显著减少内存消耗。展示了从原始数组到稀疏数组的转换过程、关键代码和还原稀疏数组的步骤,以及相关Java源码和效果展示。
摘要由CSDN通过智能技术生成

目录

稀疏数组

Java源码

效果图


稀疏数组

原数组: 11x11

00000000000
00100000000
00020000000
00000000000
00000000000
00000000000
00000000000
00000000000
00000000000
00000000000
00000000000

变为稀疏数组:

[0]11112
[1]121
[2]232

Java源码

 package com.hkd.array;
 /*
 当一个数组中大部分元素为0,或者为同一值的数组时,可以使用稀疏数组保存该数组
 稀疏数组处理方式是:
     记录数组一共几行几列,有多少个不同值
     把具有不同值的元素行,列,值,记录在一个小规模的数组中,从而缩小程序的规模
  */
 public class ArrayDemo05 {
     public static void main(String[] args) {
         //创建一个二维数组 11*11
         int[][] array1=new int[11][11];
         array1[1][2]=1;
         array1[2][3]=2;
 ​
         //输出原始的数组
         System.out.println("输出原始的数组:");
         for (int i=0;i< array1.length;i++){
             for (int j=0;j< array1[i].length;j++){
                 System.out.print(array1[i][j]+"\t");
             }
             System.out.println();
         }
 ​
         System.out.println("---------------------");
 ​
         //转换为稀疏数组保存
         //获取有效值的个数
         int sum=0;
         for (int i=0;i< array1.length;i++){
             for (int j=0;j< array1[i].length;j++){
                 if(array1[i][j]!=0){
                     sum++;
                 }
             }
         }
         System.out.println("有效值的个数:"+sum);
 ​
         //创建一个稀疏数组的数组
         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("稀疏数组:");
         for (int i=0;i< array2.length;i++){
             for (int j=0;j< array2[i].length;j++){
                 System.out.print(array2[i][j]+"\t");
             }
             System.out.println();
             /*System.out.println(array2[i][0]+"\t"
                     +array2[i][1]+"\t"
                     +array2[i][2]+"\t");*/
         }
 ​
         System.out.println("---------------------");
 ​
         //还原稀疏数组
         //1.读取稀疏数组
         /*
         读取稀疏数组,在稀疏数组中的array2[0][0]和array2[0][1]代表原数组的行列数,
         此时array3中每个元素都为默认值0,
         也就是说只用从array2数组中获取(1,2)和(2,3)位置上的数再进行赋值就行了
          */
         int[][] array3=new int[array2[0][0]][array2[0][1]];
 ​
         //2.给其中的元素还原它的值
         for (int i = 1; i < array2.length; i++) {
             array3[array2[i][0]][array2[i][1]]=array2[i][2];
         }
 ​
         //3.打印
         System.out.println("还原稀疏数组:");
         for (int[] ints : array3) {
             for (int anInt : ints) {
                 System.out.print(anInt+"\t");
             }
             System.out.println();
         }
     }
 }

效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值