稀疏数组

# 稀疏数组--一种数据结构(重点)

稀疏数组的处理方式:
记录数组一共有几行几列,有多少个不同值
将具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规(压缩)


```javascript
public class SparseArrayDemo01 {
    public static void main(String\[\] args) {
        checkerboard();
    }


    //稀疏数组
    public static void checkerboard(){


        //创建一个11\*11的棋盘  0:没有棋子  1:黑棋  2:白棋
        int\[\]\[\] checkerboard = new int\[11\]\[11\];
        //在第一行第二列存:1    第二行第二列存:2
        checkerboard\[0\]\[1\] = 1;
        checkerboard\[1\]\[1\] = 2;
        //打印棋盘
        for (int\[\] c1:checkerboard){
            for (int c2:c1){
                System.out.print(c2+"\\t");
            }
            System.out.println();
        }
        System.out.println("打印棋盘--------------------");
        //将棋盘中的有价值数据存储到稀疏数组中--(稀疏数组的本质就是一个数组)
        //先获取棋盘中的有价值数据有多少个--(这决定了稀疏数组有多少行)
        int sum = 0;
        for (int\[\] ints : checkerboard) {
            for (int j = 0; j < checkerboard.length; j++) {
                if (ints\[j\] != 0) {
                    sum++;
                }
            }
        }
        System.out.println("有价值的数据个数:"+sum);
        //先创建一个稀疏数组
        int\[\]\[\] sparse = new int\[sum+1\]\[3\];
        //稀疏数组的第一行存储棋盘有多少行和列:行  列  有价值数的个数
        sparse\[0\]\[0\] = 11;
        sparse\[0\]\[1\] = 11;
        sparse\[0\]\[2\] = sum;
        //将有价值数存入稀疏数组中,按照:行   列   值;的方式存储
        int count=0;
        for (int i=0; i<checkerboard.length;i++) {
            for (int j = 0; j < checkerboard.length; j++) {
                if (checkerboard\[i\]\[j\] != 0) {
                    count++;
                    sparse\[count\]\[0\]=i;
                    sparse\[count\]\[1\]=j;
                    sparse\[count\]\[2\]=checkerboard\[i\]\[j\];
                    //System.out.println(checkerboard\[i\]\[j\]);
                }
            }
        }
        //打印稀疏数组
       for (int\[\] s1:sparse){
           for (int s2:s1){
               System.out.print(s2+"\\t");
           }
           System.out.println();
       }


       //还原棋盘
        System.out.println("还原棋盘----------------");
       //获取稀疏数组的第一行的信息:行  列   个数
        int row = sparse\[0\]\[0\];
        int list = sparse\[0\]\[1\];
        int\[\]\[\] checkerboard2 = new int\[row\]\[list\];
        //再将数据写入checkerboard2中
        //int count2 = 1;
        //遍历sparse
        for (int i = 1; i <sparse.length ; i++) {
                checkerboard2\[sparse\[i\]\[0\]\]\[sparse\[i\]\[1\]\] = sparse\[i\]\[2\];
                //count2++;
        }
        for (int\[\] c1:checkerboard2){
            for(int c2:c1){
                System.out.print(c2+"\\t");
            }
            System.out.println();
        }
    }
}
0    1    0    0    0    0    0    0    0    0    0    
0    2    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
打印棋盘--------------------
有价值的数据个数:2
11    11    2    
0    1    1    
1    1    2    
还原棋盘----------------
0    1    0    0    0    0    0    0    0    0    0    
0    2    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    0    
0    0    0    0    0    0    0    0    0    0    
```

 来源:【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili

posted @ 2020-12-01 18:31  争取做百分之一  阅读(25)  评论(0)    收藏  举报