1 package com.aixuexi.contact; 2 3 public class SpareArray { 4 public static void main(String[] args) { 5 6 // 创建一个原始的二维数组 11 * 11 7 int arrchess1[][] = new int[11][11]; 8 //二维数组 赋值 9 arrchess1[1][2] = 1; 10 arrchess1[2][3] = 2; 11 arrchess1[4][5] = 1; 12 arrchess1[8][5] = 2; 13 // 输出原始的二维数组 14 System.out.println("====原始数组==== "); 15 for(int i = 0; i < 11; i++) { 16 for(int j= 0; j < 11; j++) { 17 System.out.printf("%d ",arrchess1[i][j]); 18 } 19 System.out.println(); 20 } 21 // 将二维数组 转 稀疏数组 22 System.out.println("====稀疏数组==== "); 23 // 1)统计个数 count 24 int sum = 0; 25 for(int i = 0; i < 11; i++) { 26 for(int j = 0; j< 11; j++) { 27 if(arrchess1[i][j] != 0) { 28 sum++; 29 } 30 } 31 } 32 System.out.println("稀疏数组个数是:"+ sum); 33 // 2)创建对应的稀疏数组 、赋值 34 int sparearray[][] = new int[sum+1][3]; 35 sparearray[0][0] = 11; //行 36 sparearray[0][1] = 11; //列 37 sparearray[0][2] = sum; //个数 38 //遍历原来的二维数组,将非0的值存放到 sparseArr中 39 int count = 0; 40 for(int i = 0; i < 11; i++) { 41 for(int j = 0; j < 11; j++) { 42 if(arrchess1[i][j] != 0) { //按行给稀疏数组赋值 43 count++; //第0行已经存放数据了 从第一行开始 44 sparearray[count][0] = i; 45 sparearray[count][1] = j; 46 sparearray[count][2] = arrchess1[i][j]; //注意点:--原来的-- 不要搞混 47 } 48 } 49 } 50 // 3)打印稀疏数组 51 for(int i = 0; i < sum + 1; i++) { 52 for(int j = 0; j < 3; j++) { 53 System.out.printf("%d ",sparearray[i][j]); 54 } 55 System.out.println(); 56 } 57 System.out.println(); 58 //将稀疏数组 --》 恢复成 原始的二维数组 59 //1)1. 先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组 60 int arrchess2[][] = new int[sparearray[0][0]][sparearray[0][1]]; 61 //2)2. 在读取稀疏数组后几行的数据(从第二行开始),并赋给 原始的二维数组 即可 62 for(int i = 1; i < sparearray.length;i++) { // 注意:遍历sparearray 别弄错成 arrchess2 63 arrchess2[sparearray[i][0]] [sparearray[i][1]] = sparearray[i][2]; 64 } 65 66 System.out.println("====恢复的稀疏数组==== "); 67 for(int i = 0; i < 11; i++) { 68 for(int j= 0; j < 11; j++) { 69 System.out.printf("%d ",arrchess2[i][j]); 70 } 71 System.out.println(); 72 } 73 74 System.out.println("hello.."); 75 } 76 }