public static void main(String[] args) {
// 构建原始数组(并赋值初始值,假设大量的默认值为0)
int[][] originalArray = new int[11][11];
originalArray[1][2] = 1;
originalArray[2][3] = 2;
originalArray[3][4] = 2;
System.out.println("原始数组");
for (int[] ints : originalArray) {
for (int anInt : ints) {
System.out.printf("%dt",anInt); // 格式化输出
}
System.out.println();
}
// 构建稀疏数组
int sum = 0; // 其他值的个数(重复值应不应该算)
for (int[] ints : originalArray) {
for (int anInt : ints) {
if (anInt != 0) {
sum++;
}
}
}
int[][] sparseArray = new int[sum + 1][3];
// 第一行 原始数组行数,原始数组列数,其他值的个数
sparseArray[0][0] = 11;
sparseArray[0][1] = 11;
sparseArray[0][2] = sum;
// 每个其他值对应原始数组的行号,列号,值
int row = 1;
for (int i = 0; i < originalArray.length; i++) {
for (int j = 0; j < originalArray[i].length; j++) {
if (originalArray[i][j] != 0) {
sparseArray[row][0] = i;
sparseArray[row][1] = j;
sparseArray[row][2] = originalArray[i][j];
row++;
}
}
}
System.out.println("稀疏数组");
for (int[] ints : sparseArray) {
System.out.printf("%dt%dt%dtn",ints[0],ints[1],ints[2]); // 格式化输出
}
// 将稀疏数组转换成原始数组
int[][] originalArray1 = new int[sparseArray[0][1]][sparseArray[0][1]];
for (int i = 1; i < sparseArray.length; i++) {
originalArray1[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
}
System.out.println("恢复的原始数组");
for (int[] ints : originalArray1) {
for (int anInt : ints) {
System.out.printf("%dt",anInt); // 格式化输出
}
System.out.println();
}
}
输出结果:
原始数组
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
稀疏数组
11 11 3
1 2 1
2 3 2
3 4 2
恢复的原始数组
0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0
0 0 0 2 0 0 0 0 0 0 0
0 0 0 0 2 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0