#java实现稀疏数组和普通数组的转换
/**
* 稀疏数组
*/
public class SparseArrayTest {
public static void main(String[] args) {
// 从普通数组转到稀疏数组
//1.先建立一个普通数组,遍历得到有效数据。 0代表无效数据 1.代表蓝色 2.代表黑色
int[][] chessArr1 = new int[11][11];
chessArr1[2][3] = 1;
chessArr1[3][4] = 2;
//2.输出这个普通的数组并判断有效数据
int sum = 0;
for (int[] rows : chessArr1) {
for (int i = 0; i < rows.length; i++) {
int data = rows[i];
System.out.printf("%d\t",data);
//判断有多少个有效数据
if(data!=0){
sum++;
}
}
System.out.println("");
}
System.out.println(sum);
//建立一个 稀疏数组,然后把数组往稀疏数组里面 写入。
int[][] sparseArr = new int[sum+1][3];
// 对稀疏数组的第一行进行赋值。
sparseArr[0][0] = 11;
sparseArr[0][1]=11;
sparseArr[0][2]=sum;
int count = 0;
for (int i = 0; i < chessArr1.length; i++) {
for (int j = 0; j < chessArr1[i].length; j++) {
if(chessArr1[i][j]!=0){ //如果普通数组不为零,则把对应的角标值放入到稀疏数组的第二行。
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[i][j];
}
}
}
System.out.println("——————————输出稀疏数组————————————");
for (int i = 0; i < sparseArr.length; i++) {
for (int j = 0; j < sparseArr[i].length; j++) {
System.out.printf("%d\t",sparseArr[i][j]);
}
System.out.println();
}
System.out.println("从稀疏数组转到普通数组.....");
//.从稀疏数组转到普通数组
//1.先定义一个普通数组
int[][] arr = new int[sparseArr[0][0]][sparseArr[0][1]];
//2.循环稀疏数组,根据角标,把有效值赋值给 普通数组 注意,只给普通数组有效值,也就是把本例子中的1,2 移动过去就行。
for (int i = 1; i < sparseArr.length; i++) { //肯定是从第二行开始循环的。稀疏数组特性决定的。
arr[sparseArr[i][0]][sparseArr[i][1]] =sparseArr[i][2]; //sparseArr[i][0]拿到的是稀疏数组的值,也就是arr[][]数组的有效值的行的角标值。
}
System.out.println("##########接下来输出返回后的普通数组的值#############");
//循环就完事了
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.printf("%d\t",arr[i][j]);
}
System.out.println("");
}
}
}