稀疏数组的使用及理解

一个五子棋程序

在这里插入图片描述在这种程序中 我们需要把五子棋转换为数组形式
如果需要一个保存内容 我们需要把内容存盘
但是这种11*11的数组 有大量的0 显然不是我们想要的
所以我们可以用稀疏数组来解决这种问题

稀疏数组介绍

稀疏数组也是一个二维数组 他是一个[X][3]的数组 如上图的二维数组可转化:
在这里插入图片描述
设 原二维数组是【[X][Y]】
第一列 [0] 代表二维数组的长度X [1]代表二位数组的宽度Y [2] 代表不为0的数字个数
之后的每一列记录一个不为0的数字坐标 和 值
也可理解为:
在这里插入图片描述
这样 之前的例子我们只用了一个int [3][3] 就表示了一个 int[11][11]的内容
减少了存储空间

应用场景

当我们的业务场景中有大量为0或者一个默认值的时候 我们就可以用稀疏数组代替二位数组进行存储

代码实现

二维数组 =》 稀疏数组

public void arrayToSparse() {
        int[][] arr = new int[11][11];
        arr[1][2] = 1;
        arr[2][3] = 2;

        int xLength = 11;
        int yLength = 11;
        int sumValueCount = 0;
        for (int i = 0; i < xLength; i++) {
            for (int j = 0; j < yLength; j++) {
                    if(arr[i][j]!=0){
                        sumValueCount++;
                    }
            }
        }
        int[][] sparseArr = new int[sumValueCount+1][3];
        sparseArr[0][0] = xLength;
        sparseArr[0][1] = yLength;
        sparseArr[0][2] = sumValueCount;
        int count = 1;
        for (int i = 0; i < xLength; i++) {
            for (int j = 0; j < yLength; j++) {
                if(arr[i][j]!=0){
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = a[i][j];
                    count++;
                }
            }
        }
        for (int[] ints : sparseArr) {
            for (int anInt : ints) {
                System.out.println(anInt+"\t");
            }
            System.out.println();
        }
    }

输出结果:
在这里插入图片描述

稀疏数组=》二维数组

  public void sparseToArray() {
        int[][] sparse = new int[3][3];
        sparse[0] = new int[]{11,11,2};
        sparse[1] = new int[]{1,2,1};
        sparse[2] = new int[]{2,3,2};

        int[][] array = new int[sparse[0][0]][sparse[0][1]];

        for (int i = 1; i < sparse.length; i++) {
            int x = sparse[i][0];
            int y = sparse[i][1];
            int value = sparse[i][2];
            array[x][y] = value;
        }
        for (int[] ints : array) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t\t");
            }
            System.out.println();
        }
    }

输出结果:
在这里插入图片描述

发布了24 篇原创文章 · 获赞 10 · 访问量 3085

猜你喜欢

转载自blog.csdn.net/qq_43091847/article/details/103835846