ToB企服应用市场:ToB评测及商务社交产业平台

标题: day09-Java数组 [打印本页]

作者: 兜兜零元    时间: 2022-9-3 06:30
标题: day09-Java数组
Java数组

9.稀疏数组

什么是稀疏数组
如下图:左边是原始数组,右边是稀疏数组

 

根据上图创建稀疏数组
  1. package li.bolog.array;
  2. //创建稀疏数组
  3. public class ArrayDemo08 {
  4.    public static void main(String[] args) {
  5.        //1.创建一个二维数组 11*11  0:代表没有棋子    1:黑棋    2:白棋
  6.        int[][] array1=new int[11][11];
  7.        array1[1][2]=1;
  8.        array1[2][3]=2;
  9.        //输出原始的数组
  10.        System.out.println("输出原始的数组:");
  11.        for (int[] ints:array1) {
  12.            for (int anInt:ints){
  13.                System.out.print(anInt+"\t");
  14.            }
  15.            System.out.println();
  16.        }
  17.        System.out.println("=============================");
  18.        //转换为稀疏数组保存
  19.        //获取有效值的个数sum
  20.        int sum=0;
  21.        for (int i = 0; i < 11; i++) {
  22.            for (int j = 0; j < 11; j++) {
  23.                if (array1[i][j] != 0) {
  24.                    sum++;
  25.                }
  26.            }
  27.        }
  28.        System.out.println("有效值的个数:"+sum);
  29.        //2.创建一个稀疏数组
  30.        /*样式如图所示
  31.        一共有sum个有效值,则行数是sum+1,记录总行、列、有效值个数占一行,记录有效值占sum行
  32.        3列则是固定的,分别是行、列、值
  33.        */
  34.        int[][] array2=new int[sum+1][3];
  35.        array2[0][0]=11;
  36.        array2[0][1]=11;
  37.        array2[0][2]=sum;
  38.        //遍历二维数组,将非零的值存放到稀疏数组中
  39.        int count=0;
  40.        for (int i = 0; i < array1.length; i++) {//array1.length代表array1的行数
  41.            for (int j = 0; j < array1[i].length; j++) {//array1[i].length代表列数
  42.                if (array1[i][j] != 0) {
  43.                    count++;//count数值从一开始,因为第0行已经存了稀疏数组的总行、列、有效值个数
  44.                    array2[count][0]=i;//从当前行的第一个值存有效值的行数
  45.                    array2[count][1]=j;//从当前行的第二个值存有效值的列数
  46.                    array2[count][2]=array1[i][j];//从当前行的第三个值存放有效值数值
  47.                }
  48.            }
  49.        }
  50.        //输出稀疏数组
  51.        System.out.println("稀疏数组:");
  52.        for (int i = 0; i < array2.length; i++) {
  53.            System.out.println(array2[i][0]+"\t"
  54.                    +array2[i][1] +"\t"
  55.                    +array2[i][2] +"\t");
  56.        }
  57.        System.out.println("=============================");
  58.        //稀疏数组还原
  59.        //1.读取稀疏数组
  60.        //array2[0][0]代表原来数组总行数   array2[0][1]代表原来数组总列数
  61.        int[][] array3 = new int[array2[0][0]][array2[0][1]];
  62.        /*
  63.        稀疏数组:
  64.            11  11  2
  65.            1   2   1
  66.            2   3   2
  67.         */
  68.        //2.给其中元素还原值
  69.        for (int i = 1; i < array2.length; i++) {//array.length为稀疏矩阵的行数,这里具体值为3
  70.            array3[ array2[i][0] ][ array2[i][1] ] = array2[i][2];//这里只填入了有效值,其他的0值在array3创建时已经隐式初始化
  71.        }
  72.        //3.打印array3
  73.        System.out.println("输出还原的数组:");
  74.        for (int[] ints:array3) {
  75.            for (int anInt:ints){
  76.                System.out.print(anInt+"\t");
  77.            }
  78.            System.out.println();
  79.        }
  80.    }
  81. }
复制代码

  

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4