当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组,稀疏数组的处理方法是:
public static void main(String[] args) { //1.创建一个二维数组 11*11 //0 没有棋子 1 黑棋 2 白棋 int[][] array1=new int[11][11]; array1[1][2]=1; array1[2][3]=2; //输出原始数组 for (int i = 0; i <array1.length ; i++) { for (int j = 0; j <array1[i].length ; j++) { System.out.print(array1[i][j]+"\t"); } System.out.println(); } }
以上代码创建一个棋盘完毕
变为稀疏数组
1 //转换为稀疏数组 2 3 //1.获取有效值个数 4 int sum = 0; 5 for (int i = 0; i < 11; i++) { 6 for (int j = 0; j < 11; j++) { 7 if (array1[i][j] != 0) { 8 sum++; 9 } 10 } 11 } 12 13 System.out.println("有效值的个数:"+sum); 14 //2.得到稀疏数组的数组 15 int[][] array2=new int[sum+1][3]; 16 array2[0][0]=11; 17 array2[0][1]=11; 18 array2[0][2]=sum; 19 //遍历二维数组,将非零值放入稀疏数组 20 int count=0; 21 for (int i = 0; i < array1.length; i++) { 22 for (int j = 0; j <array1[i].length ; j++) { 23 if(array1[i][j]!=0){ 24 count++; 25 array2[count][0]=i; 26 array2[count][1]=j; 27 array2[count][2]=array1[i][j]; 28 } 29 } 30 } 31 //输出稀疏数组 32 System.out.println("稀疏数组:"); 33 for (int i = 0; i < array2.length; i++) { 34 System.out.println(array2[i][0]+"\t" 35 +array2[i][1]+"\t" 36 +array2[i][2]); 37 38 }
还原数组
1 // 还原稀疏数组 2 System.out.println("还原稀疏数组"); 3 //读取稀疏数组 4 int[][] array3=new int[array2[0][0]][array2[0][1]]; 5 //给其他数组还原值 6 for (int i = 1; i < array2.length; i++) { 7 array3[array2[i][0]][array2[i][1]]=array2[i][2]; 8 } 9 //输出array3 10 for (int i = 0; i < array3.length; i++) { 11 for (int j = 0; j < array3[i].length; j++) { 12 System.out.print(array3[i][j] + "\t"); 13 } 14 System.out.println(); 15 } 16 }
原文:https://www.cnblogs.com/wyx1504/p/13063095.html