package com.perwrj.sparsearray; public class SparseArray { public static void main(String[] args) { /* * 原始數組的建立與遍歷 */ System.out.println("原始的二維數組"); int chessArr [][] = new int[11][11]; chessArr [1][2] = 1; chessArr [2][3] = 2; for (int[] is : chessArr) { for (int is2 : is) { System.out.print("\t" + is2); } System.out.println("\n"); } /* * 將原始數組轉換爲稀疏數組 */ // 獲取原始數組中不爲零值的個數 int sum = 0; for (int i = 0; i < chessArr.length; i++) { for (int j = 0; j < chessArr[i].length; j++) { if (chessArr[i][j] != 0) { 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 < chessArr.length; i++) { for (int j = 0; j < chessArr[i].length; j++) { if (chessArr[i][j] != 0) { count++; sparseArr[count][0]= i; sparseArr[count][1]= j; sparseArr[count][2]= chessArr[i][j]; } } } // 打印遍歷稀疏數組 System.out.println("稀疏數組"); for (int[] is : sparseArr) { for (int is2 : is) { System.out.print("\t" + is2); } System.out.println("\n"); } /* * 稀疏數組轉換爲原始數組 */ // 用稀疏數組第一行建立原始數組 int chessArr2 [][] = new int[sparseArr[0][0]][sparseArr[0][1]]; // 遍歷賦值原始數組 for (int i = 1; i < sparseArr.length; i++) { chessArr2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2]; } // 遍歷還原後的數組 System.out.println("還原後的二維數組"); for (int[] is : chessArr2) { for (int is2 : is) { System.out.print("\t" + is2); } System.out.println("\n"); } } }