1. package com.atguigu.sparseArray;
    2. /**
    3. * @author Dxkstart
    4. * @create 2021-09-27-17:28
    5. */
    6. public class SparseArray {
    7. public static void main(String[] args) {
    8. //创建一个原始的二维数组 11*11
    9. //0:表示没有棋子,1:表示黑子,2:表示蓝子
    10. int[][] chessArray1 = new int[11][11];
    11. chessArray1[1][2] = 1;
    12. chessArray1[2][3] = 2;
    13. //输出原始二维数组
    14. System.out.println("原始的二维数组为:");
    15. for (int[] row : chessArray1){
    16. for (int item : row){
    17. System.out.print("\t" + item);
    18. }
    19. System.out.println();
    20. }
    21. //将二维数组转稀疏数组的思路
    22. //1.先遍历二维数组得到非0数据的个数
    23. int sum = 0;
    24. for (int[] row : chessArray1){
    25. for (int item : row){
    26. if (item != 0){
    27. sum++;
    28. }
    29. }
    30. }
    31. //2.创建对应的稀疏数组
    32. int[][] sparseArr = new int[sum + 1][3];
    33. //给稀疏数组赋值
    34. sparseArr[0][0] = 11;
    35. sparseArr[0][1] = 11;
    36. sparseArr[0][2] = sum;
    37. //遍历二维数组,将非0值存放到稀疏数组
    38. int count = 1;//count 用于记录是第几个非0数据
    39. for (int i = 0; i < 11; i++) {
    40. for (int j = 0;j < 11;j++){
    41. if (chessArray1[i][j] != 0){
    42. sparseArr[count][0] = i;
    43. sparseArr[count][1] = j;
    44. sparseArr[count][2] = chessArray1[i][j];
    45. count++;
    46. }
    47. }
    48. }
    49. //输出稀疏数组的形式
    50. System.out.println("稀疏数组为:");
    51. for (int[] row : sparseArr){
    52. for (int item : row){
    53. if (item != 0){
    54. System.out.print("\t" + item);
    55. }
    56. }
    57. System.out.println();
    58. }
    59. //将稀疏数组 --> 恢复成原始的二维数组
    60. /*
    61. 1.先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组。
    62. 2.在读取稀疏数组后几行的数据,并赋给原始二维数组即可。
    63. */
    64. int[][] chessArray2 = new int[sparseArr[0][0]][sparseArr[0][1]];
    65. for (int i = 1;i <= sum;i++){
    66. chessArray2[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
    67. }
    68. //输出恢复后的原始二维数组
    69. System.out.println("恢复后的原始二维数组为:");
    70. for (int[] row : chessArray2){
    71. for (int item : row){
    72. System.out.print("\t" + item);
    73. }
    74. System.out.println();
    75. }
    76. }
    77. }