数据结构之二维数组与稀疏数组的转换

1.二维数组

二维数据其实就是高数中的矩阵,在此不做过多的解释

2.稀疏数组

当一个二维数组中大多值为0,或者相同时,我们可以考虑用到稀疏数组,来减少内存

稀疏数组的处理方法:

1)一个有3列的二维数组,记录原数组有几行几列,多少个不同的值

2)不同值的元素的所在行以及列记录在稀疏数组中,从而缩小规模

3.例子如下:

数据结构之二维数组与稀疏数组的转换

 

4.下面是稀疏数组以及二维数组之间的转换

package com.ebiz.array;

/**
 * @author YHj
 * @create 2019-07-13 16:46
 * <p>
 * 稀疏数组
 */
public class SparseArray {

    public static void main(String[] args) {
        //创建原始二维数组  11*11    1代表黑子  2代表白子
        int[][] chessArray1 = new int[11][11];

        //第一行第二列有一个黑子
        chessArray1[1][2] = 1;
        //第二行第三列有一个白子
        chessArray1[2][3] = 2;

       /* System.out.println("原始二维数组");
        for (int[] row : chessArray1) {
            for (int i : row) {
                System.out.printf("%d\t",i);
                //System.out.print(i+"\t");
            }
            System.out.println();
        }*/

        //将二维数组转成稀疏数组
        //1.得到原始数组中非0数值的个数
        int sum = 0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArray1[i][j] != 0) {
                    sum++;
                    System.out.println();
                }
            }
        }
        // System.out.println("sum=" + sum);
        //2.创建稀疏数组
        int[][] sparseArray = new int[sum+1][3];
        //3.稀疏数组赋值
        //3.1 第0行
        sparseArray[0][0]=11;
        sparseArray[0][1]=11;
        sparseArray[0][2]=sum;

        //3.2 遍历原始数组,将非空值付给稀疏数组
        int count=0;  //定义一个计数器,改变行数
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (chessArray1[i][j] != 0) {
                    count++;
                    sparseArray[count][0]=i;
                    sparseArray[count][1]=j;
                    sparseArray[count][2]=chessArray1[i][j];

                }
            }
        }
        //输出稀疏数组
        System.out.println("字数数组为:");
        for (int[] row : sparseArray) {
            for (int i : row) {
                System.out.printf("%d\t",i);
            }
            System.out.println();
        }

        System.out.println("------------------------------------------------------------");
        System.out.println("稀疏数组复原");

        //根据稀疏数组创建对应数组
        int [][] chary=new int[sparseArray[0][0]][sparseArray[0][1]];

        //遍历稀疏数组,付给chary
        for (int i = 1; i < sparseArray.length; i++) {
            chary[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
        }

        //输出array
        for (int[] row : chary) {
            for (int i : row) {
                System.out.printf("%d\t",i);
                //System.out.print(i+"\t");
            }
            System.out.println();
        }


    }
}

 

上一篇:SparseArray原理解析


下一篇:普通数组和稀疏数组的相互转换--棋盘存盘