首页 > 其他分享 >稀疏数组SparseArray

稀疏数组SparseArray

时间:2023-02-26 19:36:11浏览次数:31  
标签:SparseArray int sum chessArr1 稀疏 二维 数组

稀疏数组SparseArray

1. 稀疏数组介绍

当一个数组中的大部分元素都为0,或者大部分元素均为同一个值时,此时记录了很多没有意义的数据,可以用稀疏数组来保存该数组。

在稀疏数组中记录了原数组共有几行几列,有多少个不同的值以及不同值的元素的位置。稀疏数组将这些信息记录在一个小规模的数组当中,从而达到缩小程序规模的目的。

经典的应用场景包括:用户数量庞大的线上五子棋棋盘游戏(作为棋盘的二维数组中只有三种值,0表示未放置棋子,以及黑子和白子),另外在Android开发中也经常用到SparseArray的API。

2. 实例说明

3. 二维数组与稀疏数组相互转换

3.1 二维数组转稀疏数组

思路:1.遍历原始的二维数组,得到有效数据值的个数(非0值个数sum)

​2.根据sum以及稀疏数组“行不确定列为3”的特点,创建稀疏数组sparsearray[sum+1][3]

​3.将二维数组的有效值及其位置存放到稀疏数组中

        // 初始化11*11棋盘二维数组
        int chessArr1[][] = new int[11][11];
        // 0代表无落子 1代表黑子 2代表白子
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        chessArr1[1][3] = 1;
        // 增强for循环输出初始二维数组(棋盘)
        System.out.println("输出初始化棋盘:");
        for(int[] row:chessArr1){
            for(int data:row){
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

        // 二维数组 转 稀疏数组
        // 遍历二维数组,记录有效值总数sum用于初始化sparsearray
        int sum = 0;
        for(int[] row:chessArr1){
            for(int data:row){
                if(data!=0) sum++;
            }
        }
        // 初始化sparsearray
        int sparseArr[][] = new int[sum+1][3];
        sparseArr[0][0] = chessArr1.length;
        sparseArr[0][1] = chessArr1.length;
        sparseArr[0][2] = sum;
        // 遍历二维数组,将有效值及其位置存入稀疏数组sparsearray
        // 定义一个计数器count,用于记录有效值
        int count = 0;
        for(int i=0; i<chessArr1.length; i++){
            for(int j=0; j<chessArr1.length; j++){
                if(chessArr1[i][j]!=0){
                    count++;
                    sparseArr[count][0] = i;
                    sparseArr[count][1] = j;
                    sparseArr[count][2] = chessArr1[i][j];
                }
            }
        }
        // 输出稀疏数组
        System.out.println("转化为稀疏数组:");
        for(int[] row:sparseArr){
            for(int data:row){
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }

3.2 稀疏数组转二维数组

思路:1.根据sparsearray第一行的数据创建二维数组

​2.再读取后续几行的数据,将相应的有效值赋给二维数组的相应位置

        // 稀疏数组 转 二维数组
        // 根据sparsearray第0行初始化二维数组大小
        int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
        // 从第1行开始遍历,将有效值及其位置写入二维数组
        for(int i=1; i<sparseArr[0][2]+1; i++){
            chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
        }
        System.out.println("转化为二维数组:");
        for(int[] row:chessArr2){
            for(int data:row){
                System.out.printf("%d\t", data);
            }
            System.out.println();
        }
    }

标签:SparseArray,int,sum,chessArr1,稀疏,二维,数组
From: https://www.cnblogs.com/SnkrGao/p/17157353.html

相关文章