稀疏数组
1.当一个数组中大部分元素为同一个数值时,可以使用稀疏数组来保存该数组。
2.处理方法
(1)记录数组一共有几行几列,有多少个不同的值
(2)把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模

3.需求应用

1 package Study; 2 3 public class XiShuShuZu { 4 5 public static void main(String[] args){ 6 int chessArr1[][]=new int[11][11]; 7 chessArr1[1][2]=1; 8 chessArr1[2][3]=2; 9 10 System.out.println("原二维数组:"); 11 for(int[] row:chessArr1){ 12 for(int data:row){ 13 System.out.printf("%d\t",data); 14 } 15 16 System.out.println(); 17 } 18 19 //System.out.println("行:"+chessArr1.length+" 列:"+chessArr1[0].length);//获取一个二维数组的行与列 20 21 22 23 //将二维数组转成稀疏数组 24 int sum=0; 25 for(int i=0;i<chessArr1.length;i++){ 26 for(int j=0;j<chessArr1[0].length;j++){ 27 if(chessArr1[i][j]!=0){ 28 sum++; 29 } 30 } 31 } 32 33 //创建稀疏数组 34 int sparseArr[][]=new int[sum+1][3]; 35 36 //赋值 37 38 //第一行 39 sparseArr[0][0]=chessArr1.length; //原二维数组的行数 40 sparseArr[0][1]=chessArr1[0].length;//原二维数组的列数 41 sparseArr[0][2]=sum;//原二维数组的元素个数 42 int k=0; 43 //遍历二维数组,将非0的值存放到稀疏数组中 44 for(int i=0;i<chessArr1.length;i++){ 45 for(int j=0;j<chessArr1[0].length;j++){ 46 if(chessArr1[i][j]!=0){ 47 k++; 48 sparseArr[k][0]=i; 49 sparseArr[k][1]=j; 50 sparseArr[k][2]=chessArr1[i][j]; 51 52 53 54 } 55 } 56 } 57 System.out.println("------------------------------------------------------------------"); 58 //打印 59 System.out.println("转换成的稀疏数组:"); 60 for(int[] row:sparseArr){ 61 for(int data:row){ 62 System.out.printf("%d\t", data); 63 } 64 System.out.println(); 65 } 66 67 68 //将稀疏数组恢复成原二维数组 69 int chessRow=sparseArr[0][0]; 70 int chessLine=sparseArr[0][1]; 71 int newChessArry[][]=new int[chessRow][chessLine]; 72 for(int i=1;i<sparseArr.length;i++){ 73 for(int j=0;j<sparseArr[0].length;j++){ 74 newChessArry[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2]; 75 } 76 } 77 System.out.println("------------------------------------------------------------------"); 78 79 //打印恢复后的数组 80 81 System.out.println("恢复为原二维数组:"); 82 for(int[] row: newChessArry){ 83 for(int data:row){ 84 System.out.printf("%d\t", data); 85 } 86 System.out.println(); 87 } 88 89 90 } 91 92 }
运行结果:


浙公网安备 33010602011771号