**平时我们玩五子棋游戏,都会遇到一个存档问题,如果做到优化压缩内存存储呢?
下面将分享一个通过稀疏数组进行压缩处理的优化处理方案
首先介绍一下稀疏数组:
1)当一个数组中大部分元素都为0时、或者为同一个数值时 可以用稀疏数组来存储该数组
2)处理方法:
1. 记录数组一共几行几列,有多少个不同的值
2 .把具有不同值的元素的列行记录在一个小规模的数组中,从而缩小程序的规模**
一.先创建一个二维的11*11的棋盘
package com.lwh.sqarse;
public class Sqarse {
public static void main(String[] args) {
//创建一个二维数组11*11
//1代表黑色棋子 2代表白色棋子
int chessArr[][] = new int[11][11];
chessArr[1][2]=1;
chessArr[2][3]=2;
//打印原始数组
for (int i = 0; i <chessArr.length ; i++) {
for (int j = 0; j <chessArr.length ; j++) {
System.out.print(chessArr[i][j]+" ");
}
System.out.println();
}
//遍历找出有效数据sum
int sum=0;
for (int i = 0; i <chessArr.length ; i++) {
for (int j = 0; j <chessArr.length ; j++) {
if (chessArr[i][j]!=0)
{
sum++;
}
}
}
System.out.println(sum);
二. 创建一个稀疏数组
//创建一个稀疏数组
int chessArr2[][] = new int[sum+1][3];
chessArr2[0][0]=11;
chessArr2[0][1]=11;
chessArr2[0][2]=sum;
//给稀疏数组赋值
int count=0;
for (int i = 0; i <chessArr.length ; i++) {
for (int j = 0; j <chessArr.length ; j++) {
if (chessArr[i][j]!=0){
count++;
chessArr2[count][0]=i;
chessArr2[count][1]=j;
chessArr2[count][2]=chessArr[i][j];
}
}
}
System.out.println("稀疏数组如下:");
//循环输出稀疏数组
for (int i = 0; i <chessArr2.length ; i++) {
System.out.print(chessArr2[i][0]+" " +chessArr2[i][1]+" "+chessArr2[i][2]);
System.out.println();
}
三 .稀疏数组转二维数组
//稀疏数组转二维数组
System.out.println("稀疏数组转二维数组如下");
int chessArr3[][] = new int[chessArr2[0][0]][chessArr2[0][1]];
int c=0;
for (int i = 0; i <sum; i++) {
c++;
chessArr3[chessArr2[c][0]][chessArr2[c][1]]=chessArr2[c][2];
}
// chessArr3[chessArr2[1][0]][chessArr2[1][1]]=chessArr2[1][2];
// chessArr3[chessArr2[2][0]][chessArr2[2][1]]=chessArr2[2][2];
System.out.println(chessArr3.length);
for (int i = 0; i <chessArr3.length ; i++) {
for (int j = 0; j <chessArr3.length ; j++) {
System.out.print(chessArr3[i][j]+ " ");
}
System.out.println();
}
}
操作后就把一个11乘11的二维数组压缩成了一个3乘3的数组大大减少了内存消耗
tips:遇到大量重复多余的数据时 我们可以考录把数据转化成另外一种格式存储来节省内存空间