稀疏数组的应用
这是一个11*11棋盘下了两个棋零的部分全是空的所以这样狠浪费空间,由此引出稀疏数组
稀疏数组的介绍
创建稀疏数组思路分析
代码实现
package 稀疏数组;
/**
* @author 你是大**吗?
* version 1.0
*/
@SuppressWarnings({"all"})
public class SparseArray {
public static void main(String[] args) {
//创建原有的数组
//0 空 1 白子 2 黑子
int chessArr1[][]= new int[11][11];
chessArr1[1][2]=1;
chessArr1[2][3]=2;
chessArr1[4][5]=9;
//输出查看
//增强for 根据数组名去出 第一行的给row[]
// for (int row[] :chessArr1) {
// for (int num :row) {
// System.out.printf("%d\t",num);
// }
// System.out.println();
// }
//得出数组里面有值的元素有多少个
int sum=0;
for (int row[] :chessArr1) {
for (int num :row) {
if(num!=0){
sum++;
}
}
}
//创建稀疏数组
int[][] chessArr2 = new int[sum + 1][3];
chessArr2[0][0]=11;
chessArr2[0][1]=11;
chessArr2[0][2]=sum;//存放有值元素有多少个
System.out.println(sum);
//把值放到稀疏数组、
int count=1;//表示稀疏数组的有几行 第0行存放了 所以从1开始
for (int i = 1; i < chessArr1.length; i++) {
for (int j = 0; j <chessArr1[i].length ; j++) {
if(chessArr1[i][j]!=0){
//存放该值在哪一行
chessArr2[count][0]=i;
//存放该值在哪一列
chessArr2[count][1]=j;
chessArr2[count][2]=chessArr1[i][j];
count++;
}
}
}
//打印稀疏数组
for (int i = 0; i < chessArr2.length; i++) {
for (int j = 0; j <chessArr2[i].length ; j++) {
System.out.printf("%d\t",chessArr2[i][j]);
}
System.out.println();
}
//让稀疏数组转换为普通数组
int[][] chessArr3 = new int[chessArr2[0][0]][chessArr2[0][1]];
//循环chessArr2.length-1次
for (int i = 1; i < chessArr2.length; i++) {
//第一次就是 chessArr2[1][0] =1 chessArr2[1][1]=2
//chessArr2[1][2]=2 赋值给新的普通数组
chessArr3[chessArr2[i][0]][chessArr2[i][1]]=chessArr2[i][2];
}
//测试恢复的数组
//增强for 根据数组名去出 第一行的给row[]
System.out.println("===================恢复之后=====================");
for (int row[] :chessArr3) {
for (int num :row) {
System.out.printf("%d\t",num);
}
System.out.println();
}
}
}