# 稀疏数组--一种数据结构(重点)
稀疏数组的处理方式:
记录数组一共有几行几列,有多少个不同值
将具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规(压缩)
```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