创建一个11*11的二维数组

int[][] array1 = new int[11][11];
array1[1][2] = 1;
array1[2][3] = 2;
System.out.println("原始数组");

for(int[] ints : array1) {
   
  for(int anInt : ints) {
   
    System.out.print(anInt + "\t");
  }
  System.out.println();
}

打印结果

转化为稀疏数组

先算出值不为0的个数,然后将不为0的值的坐标存在稀疏数组中

 //转换为稀疏数组
 int sum = 0;
 for(int i = 0; i < 11; i++) {
   
   for (int j = 0; j < 11; j++) {
   
     if(array1[i][j] != 0) {
   
       sum++;
     }
   }
 }
 System.out.println("有效个数"+sum);

 //创建一个稀疏数组
 int[][] array2 = new int[sum + 1][3];
 array2[0][0] = 11;
 array2[0][1] = 11;
 array2[0][2] = sum;

 //遍历然后将非零的值存放在稀疏数组中
 //定义一个count,表示第几个不为0的值
 int count = 0;
 for (int i = 0; i < array1.length; i++) {
   
   for (int j = 0; j < array1[i].length; j++) {
   
     if(array1[i][j] != 0) {
   
       count ++;
       array2[count][0] = i;
       array2[count][1] = j;
       array2[count][2] = array1[i][j];
     }
   }
 }
 System.out.println("稀疏数组");
 for(int[] ints : array2) {
   
   for(int anInt : ints) {
   
     System.out.print(anInt + "\t");
   }
   System.out.println();
 }

打印结果

还原稀疏数组

 //还原稀疏数组
 int[][] array3 = new int[array2[0][0]][array2[0][1]];
 for (int i = 1; i < array2.length; i++) {
   
   array3[array2[i][0]][array2[i][1]] = array2[i][2];
 }
 System.out.println("还原数组");
 for(int[] ints : array3) {
   
   for(int anInt : ints) {
   
     System.out.print(anInt + "\t");
   }
   System.out.println();
 }