稀疏数组就是让数组只存储一些有用的值,比如棋盘游戏的存档,我们只需要存储我们下过的棋子的位置即可,不必存储整个棋盘的内容,这个时候我们便可以使用稀疏数组,例如:
二维数组转稀疏数组的思路:
1,首先遍历二维数组,得到二维数组有多少个有效值个数sum
2,根据sum就可以创建稀疏数组sparseArr=int[sum+1][3](这个3是固定的,代表行、列、值)
3,将二维数组存储到稀疏数组中
4,将稀疏数组存储到文件中
稀疏数组转二维数组主的思路:
1,首先从文件中读取稀疏数组
2,然后读取稀疏数组的第一行,根据第一行,创建一个二维数组,比如上面的 tdArr2=int[6][7]
3,读取稀疏数组的后几行,赋值给二维数组即可
代码如下:
public class SPARSE {
public static void main(String[] args) {
// 创建二维数组原始
int[][] arr1 = new int[11][11];
arr1[1][2] = 1;
arr1[2][3] = 2;
for (int[] row : arr1) {
for (int data : row) {
System.out.print(data + "\t");
}
System.out.println();
}
//将二维数组存储到稀疏数组中
//首先计算二维数组中的有效个数sum
int sum = 0;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
if (arr1[i][j]!=0){
sum++;
}
}
}
System.out.println("二维数组中有限数值为"+sum);
int[][] arr2 = new int[sum + 1][3];
arr2[0][0]=11;
arr2[0][1]=11;
arr2[0][2]=3;
//遍历二维数组,将有效的值存储到稀疏数组中
int count=1;
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j <arr1[i].length ; j++) {
if (arr1[i][j]!=0){
arr2[count][0]=i;
arr2[count][1]=j;
arr2[count][2]=arr1[i][j];
count++;
}
}
}
//输出稀疏数组
System.out.println("输出稀疏数组");
for (int i = 0; i <arr2.length; i++) {
System.out.println(arr2[i][0]+"\t"+
arr2[i][1]+"\t"+
arr2[i][2]);
}
//还原稀疏数组
System.out.println("===============================");
int[][] arr3=new int[arr2[0][0]][arr2[0][1]];
for (int i = 1; i <arr2.length ; i++) {
arr3[arr2[i][0]][arr2[i][1]]=arr2[i][2];
}
for (int[] row : arr3) {
for (int data : row) {
System.out.print(data + "\t");
}
System.out.println();
}
}
}