稀疏数组二维数组互相转化 的代码实现
public class SparseArray {
/**稀疏数组的介绍
* 1. 稀疏数组是将二维数组的简洁转换,使用更小的内存存储起来的一个二维列表。
* 稀疏数组 有三列。假如原来的二维数组有n个有效元素, 稀疏数组就有n+1行
* 稀疏数组第一行保存 [二维数组行,二维数组列,二维数组有效元素个数]
* 第二行开始保存 [第i个元素所在行,第i个元素所在列,第i个元素值(val)]
* 直到结束
* 2. 二维数组转稀疏数组思路
* 一、遍历原始二维数组,得到有效数据的个数sum
* 二、根据sum创建稀疏数组sparseArr int[sum+1][3]
* 三、将二维数组的有效数据存入到稀疏数组中
* 3. 稀疏数组转二维数组
* 一、读取稀疏数组第一行。根据第一行的数据,创建原始二维数组
* 二、在读取稀疏数组后几行的数据,并赋给二维数组即可。
*/
public static void main(String[] args) {
// 创建一个原始的二维数组
// 0:表示没有棋子 1:表示黑色棋子 2表示白色棋子
int[][] chessArr1 = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
chessArr1[5][6] = 1;
//输出一个二维数组
System.out.println("原始的二维数组:");
for (int[] row :
chessArr1) {
for (int data :
row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
//将二维数组 转为 稀疏数组
//1.遍历数组计算稀疏数组 非0数值个数
int sum = 0;
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[0].length; j++) {
if (chessArr1[i][j] != 0) sum++;
}
}
System.out.println("稀疏数组中非0元素个数:" + sum);
//2.创建对应的稀疏数组
int[][] sparseArr = new int[sum + 1][3];
// 给稀疏数组赋值
sparseArr[0][0] = chessArr1.length;
sparseArr[0][1] = chessArr1[0].length;
sparseArr[0][2] = sum;
// 将chess数组中的非0元素存放在稀疏数组中
int count = 1;
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[0].length; j++) {
if (chessArr1[i][j] != 0) {
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
count++;
}
}
}
//打印稀疏数组
System.out.println("________________________");
System.out.println("row\tcol\tval");
for (int[] row:
sparseArr) {
for (int val:
row) {
System.out.printf("%d\t", val);
}
System.out.println();
}
System.out.println("~~~~~~~~~~~~~~~恢复后的二维数组~~~~~~~~~~~~~~");
// 3. 将稀疏数组恢复成二维数组
/*
1 先读取稀疏数组第一行 根据第一行数据创建二维数组
2 读取第二行开始的数据, 并赋值给二维数组。
*/
// 创建二维数组
int[][] newChessArr = new int[sparseArr[0][0]][sparseArr[0][1]];
//读取第二行元素
for (int i = 0; i < sparseArr[0][2]; i++) {
newChessArr[sparseArr[i+1][0]][sparseArr[i+1][1]] = sparseArr[i+1][2];
}
//输出新的数组
for (int[] row :
newChessArr) {
for (int data :
row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
}
优化
将转化完的东西通过IO保存到本地。