public class SparseArray {
public static void main(String[] args) {
// 定义一个二维数组
int[][] originArray = initOriginArray();
System.out.println("======================二维数组======================");
for (int[] row : originArray) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
// 二维数组转稀疏数组
int[][] sparseArray = transToSparseArray(originArray);
System.out.println("======================稀疏数组======================");
for (int[] row : sparseArray) {
for (int data : row) {
System.out.printf("%d\t", data);
}
System.out.println();
}
}
private static int[][] transToSparseArray(int[][] originArray) {
// 1. 获取二维数组有多少个值
int sum = getSum(originArray);
// 2. 创建稀疏数组
int[][] sparseArray = initSparseArray(sum, originArray);
// 3. 给稀疏数组赋值
assembleSparseArray(sparseArray, originArray);
return sparseArray;
}
private static void assembleSparseArray(int[][] sparseArray, int[][] originArray) {
int count = 0;
int row = originArray.length;
int col = originArray[0].length;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (originArray[i][j] != 0) {
count++;
sparseArray[count][0] = i;
sparseArray[count][1] = j;
sparseArray[count][2] = originArray[i][j];
}
}
}
}
private static int[][] initSparseArray(int sum, int[][] originArray) {
int[][] sparseArray = new int[sum + 1][3];
sparseArray[0][0] = originArray.length;
sparseArray[0][1] = originArray[0].length;
sparseArray[0][2] = sum;
return sparseArray;
}
private static int getSum(int[][] originArray) {
int sum = 0;
int row = originArray.length;
int col = originArray[0].length;
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
if (originArray[i][j] != 0) {
sum++;
}
}
}
return sum;
}
private static int[][] initOriginArray() {
int[][] originArray = new int[11][11];
originArray[1][2] = 1;
originArray[2][3] = 2;
originArray[3][4] = 3;
originArray[4][5] = 4;
originArray[5][6] = 5;
originArray[6][7] = 6;
return originArray;
}
}
======================二维数组======================
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 3 0 0 0 0 0 0
0 0 0 0 0 4 0 0 0 0 0
0 0 0 0 0 0 5 0 0 0 0
0 0 0 0 0 0 0 6 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 6
1 2 1
2 3 2
3 4 3
4 5 4
5 6 5
6 7 6
Process finished with exit code 0