package twoDimArrayDemo;
public class SparseArray {
/*
稀疏数组也是二维数组
是一种特定格式的二维数组,记录二维数组中有效值的坐标。
/
public static void main(String[] args) {
int[][] a = new int[15][15];
//假设二维数组中有效数据只有3个
a[0][1] = 1;
a[1][1] = 2;
a[1][4] = 2;
a[2][2] = 3;
//记录有效数字个数
int sum = 0;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] != 0) {
sum++;
}
}
}
/
稀疏数组第一行内容是固定的
行数 列数 有效数字个数
15 15 3
0 1 1
1 1 2
1 4 2
*/
//创建稀疏数组x
int[][] x = new int[sum + 1][3];
//第1行,第1列为行数
x[0][0] = 15;
//第1行,第2列为列数
x[0][1] = 15;
//第1行,第3列为有效数字个数
x[0][2] = sum;
//把非0的元素存入到稀疏数组,即二维数组转稀疏数组
int index = 1;
for (int i = 0; i < a.length; i++) {
for (int j = 0; j < a[i].length; j++) {
if (a[i][j] != 0) {
//第index行,第1列的元素为i
x[index][0] = i;
//第index行,第2列的元素为j
x[index][1] = j;
//第index行,第3列的元素为a[i][j]
x[index][2] = a[i][j];
index++;
}
}
}
//输出稀疏数组x[i][j]
System.out.println(“输出稀疏数组x[i][j]:”);
for (int i = 0; i < x.length; i++) {
for (int j = 0; j < x[i].length; j++) {
System.out.print(x[i][j] + “\t”);
}
System.out.println();
}
//把稀疏数组转为二维数组
System.out.println(“把稀疏数组x[i][j]转为二维数组twoDimArray[i][j]:”);
//创建一个行数为:x[0][0]
// 列数为:x[0][1]的二维数组。
int[][] twoDimArray = new int[x[0][0]][x[0][1]];
for (int i = 1; i < x.length; i++) {
twoDimArray[x[i][0]][x[i][1]] = x[i][2];
}
for (int i = 0; i < twoDimArray.length; i++) {
for (int j = 0; j < twoDimArray[i].length; j++) {
System.out.print(twoDimArray[i][j] + “\t”);
}
System.out.println();
}
}
}