场景
文件在或数据在网络中传输时 一定是占用空间越小越好
在双人五子棋场景下
棋盘的数据存储 可以使用二维数组 初始化棋盘
将用户一 用户二存入不同的数字
在下棋上阶段 棋子量可能不是很多
0 0 1 0 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 的占用空间过大
我们可不可以将数据最小化存储
因此引入稀疏数组
稀疏数组
存储方式
如上可以存储成
11 11 2
0 2 1
1 3 2
第一个11代表 竖向数组长度
第二个11代表 横向数组长度
2则代表数组中有效数据的个数
0 2 1 代表 我在数组【0】【2】的位置存储了【1】
1 3 2 代表 我在数组【1】【3】的位置存储了【2】
那么就把占用 11乘11 的空间缩减为 三乘三的空间
代码
初始化二维数组
二维数组转换稀疏数组
稀疏数组转换二维数组
/**
* 稀疏数组
*/
public class SparseArray {
public static void main(String[] args) {
// 初始化棋盘
int[][] arr = new int[11][11];
// 用户一下棋
arr[0][2] = 1;
// 用户二下棋
arr[1][3] = 2;
int ele = 0;
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
if (anInt != 0) {
ele++;
}
}
System.out.println();
}
System.out.println("=============================");
int[][] sparseArr = new int[ele + 1][3];
sparseArr[0][0] = arr.length;
sparseArr[0][1] = arr[0].length;
sparseArr[0][2] = ele;
for (int[] ints : sparseArr) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
System.out.println("=============稀疏数组 begin================");
int count = 0;
for (int i = 0; i < sparseArr[0][0]; i++) {
for (int j = 0; j < sparseArr[0][1]; j++) {
if (arr[i][j] != 0) {
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr[i][j];
}
}
}
getTwoArray(sparseArr);
System.out.println("=============稀疏数组 end================\n");
System.out.println("=============原始二维数组 begin================");
int[][] rawArr = new int[sparseArr[0][0]][sparseArr[0][1]];
// 将稀疏数组 赋值给正常的二维数组
for (int i = 1; i < sparseArr.length; i++) {
rawArr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
getTwoArray(rawArr);
System.out.println("=============原始二维数组 end================");
}
private static void getTwoArray(int[][] arr){
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt + "\t");
}
System.out.println();
}
}
}