publicclassSpareArray { publicstaticvoidmain(String[] args) { //创建二维的原始数组 int [][]arrays=newint[6][7]; arrays[0][3]=22; arrays[0][6]=15; arrays[1][1]=11; //输出原始二维数组 for (int[]row:arrays){ System.out.println(Arrays.toString(row)); }
//转化稀疏数组 //首先需要获得值的个数确定行数,同时收集二维数组的行与列 int count=0; //二维数组的行 int row=0; //二维数组的列 int col=0; for (int []rows:arrays){ //获得行 row=arrays.length; //获得列 col=rows.length; for (int i:rows){ if(i!=0){ //获得稀疏数组的行数 count++; } } } int [][]spareArray=newint[count+1][3]; //开始赋值 spareArray[0][0]=row; spareArray[0][1]=col; spareArray[0][2]=count; int flag=1; for (int i=0;i<row;i++){ for (int j=0;j<col;j++){ if(arrays[i][j]!=0){ spareArray[flag][0]=i; spareArray[flag][1]=j; spareArray[flag][2]=arrays[i][j]; flag++; } } } for (int[]rows:spareArray){ System.out.println(Arrays.toString(rows)); } } }
稀疏数组转二维数组
得到行和列,还原二维数组,将有效数据还原到二维数组中
1 2 3 4 5 6 7 8 9 10 11 12 13
//稀疏数组转换为二维数组 int [][]newArray=newint[spareArray[0][0]][spareArray[0][1]]; //将有效值进行赋值,开始的行数 int flag1=1; for (int i=0;i<spareArray[0][2];i++){ newArray[spareArray[flag1][0]][spareArray[flag1][1]]=spareArray[flag1][2]; flag1++; } for (int[]rows:newArray){ System.out.println(Arrays.toString(rows)); }