一个五子棋程序
在这种程序中 我们需要把五子棋转换为数组形式
如果需要一个保存内容 我们需要把内容存盘
但是这种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();
}
}
输出结果: