1. 稀疏数组介绍

  • 当一个数组中 , 大部分元素为0 , 或者为同一个值的数组时
  • 可以使用稀疏数组

2. 五子棋盘案例

  • 正常情况:

image.png


  • 稀疏数组情况:

image.png

  • 代码示例: E:\案例\数据结构-算法\src\main\java\com\h\五子棋 ```java public class text { //创建一个 11*11 的二维数组 public static int[][] checkerboard = new int[11][11];

    //下棋方法 public static void run(int row,int col,int value){

    1. checkerboard[row][col] = value;

    }

    //打印棋盘 public static void sout(int[][] array){

      System.out.println("------------------------------------------------------");
    
      for (int[] ints : array) {
          for (int anInt : ints) {
              System.out.print(anInt+" ");
          }
          System.out.println("");
      }
    

    }

    //判断数组是否需要扩展 public static int[][] ifArraryExtend(int row ,int[][] sparseArrary){

      int[][] sparseArrary2 = new int[row+1][3];
      if(sparseArrary.length >= row){
          for (int i = 0; i < sparseArrary.length; i++) {
              sparseArrary2[i] = sparseArrary[i];
          }
      }
      return sparseArrary2;
    

    }

    //转化为稀疏数组 public static int[][] conversionSparseArrary(int[][] checkerboard){

      //记录非0的个数
      int sum = 0;
    
      int[][] sparseArrary = new int[1][3];
      sparseArrary[0][0] = checkerboard.length;
      sparseArrary[0][1] = checkerboard[0].length;
      sparseArrary[0][2] = 0;
    
      //转化
      for (int i=1;i<checkerboard.length;i++){
          for (int j =0;j<checkerboard[0].length;j++){
              if(checkerboard[i][j] != 0 ){
                  sum++;
                  sparseArrary = ifArraryExtend(sum,sparseArrary);
    
                  sparseArrary[sum][0] = i;
                  sparseArrary[sum][1] = j;
                  sparseArrary[sum][2] = checkerboard[i][j];
              }
          }
      }
      sparseArrary[0][2] = sum;
      return sparseArrary;
    

    }

    //转化为二维数组 public static int[][] conversionCheckerboardArrary(int[][] sparseArrary){

      int[][] checkerboard = new int[sparseArrary[0][0]][sparseArrary[0][1]];
    
      for (int i = 1; i <= sparseArrary[0][2]; i++) {
          checkerboard[sparseArrary[i][0]][sparseArrary[i][1]] = sparseArrary[i][2];
      }
      return checkerboard;
    

    }

public static void main(String[] args) throws Exception{
    run(4,6,1);
    run(5,7,2);
    sout(checkerboard);

    int[][]  sparseArrary= conversionSparseArrary(checkerboard);
    sout(sparseArrary);

    //存储
    IOUtil.writeObject(sparseArrary , "C:\\Users\\T440P\\Desktop\\a.txt");

    //读取
    Object o = IOUtil.readObject("C:\\Users\\T440P\\Desktop\\a.txt");
    int[][] array = (int[][]) o;
    sout(array);

    int[][] ints = conversionCheckerboardArrary(sparseArrary);
    sout(ints);
}

} ```