二维数组转稀疏数组的思路
1、遍历原始的二维数组,得到有效数据的个数sum
2、根据sum就可以创建稀疏数组sparseArr,稀疏数组的行取决于sum,在sum的基础上加1,列为3列
3、将二维数组的有效数据存入到稀疏数组中
稀疏数组转原始的二维数组的思路
1、先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组
2、在读取稀疏数组后几行的数据,并赋给原始的二维数组即可
//将二维数组转为稀疏数组
//将稀疏数组转为二维数组
1、二维数组首地址是否为空,即array==null;
2、二维数组是否为{},即array.length==0的情况;
3、二维数组是否为{{}},即array.length=1&&array[0].length==0的情况;
综上所述,Java中判断二维数组为空的条件为:
if((array==null||array.length==0)||(array.length==1&&array[0].length==0))
public class ArrayParse{
//二维数组转为稀疏数组
public int[][] twoDimensionalParseArray(int[][] twoArr){
if(twoArr==null){
log.info("二维数组首地址为空");
return null;
}
if(twoArr.length==0){
log.info("二维数组为{}");
return null;
}
iftwoArr.length==1&&twoArr[0].length==0){
log.info("二维数组为{{}}");
return null;
}
//获取二维数组有多少行
int rowLength=twoArr.length;
//获取二维数组有多少列
int colLength=twoArr[0].length;
//遍历二维数组,得到有效数据的个数
int sum=0;
for (int i=0;i<rowLength;i++){
for(int j=0;j<colLength;j++){
sum++;
}
}
//声明稀疏数组
int[][] parseArr=new int[sum+1][3];
//给稀疏数组赋值
parseArr[0][0]=rowLength;
parseArr[0][1]=colLength;
parseArr[0][3]=sum;
//遍历二维数组,将非0的值存放到稀疏数组中
int count=0; 用于记录是第几个非0数据
if(sum>0){
for(int i=0;i<rowLength;i++){
for(int j=0;j<colLength;j++){
if(twoArr[i][j]!=0){
count++;
parseArr[count][0]=i;
parseArr[count][1]=j;
parseArr[count][2]=twoArr[i][j];
}
}
}
}
return parseArr;
}
//稀疏数组转为二维数组
public int[][] parseArrTwo(int[][] parseArr){
if(parseArr==null){
log.info("二维数组首地址为空");
return null;
}
if(parseArr.length==0){
log.info("二维数组为{}");
return null;
}
if(parseArr.length==1&&parseArr[0].length==0){
log.info("二维数组为{{}}");
return null;
}
//获取要转换二维数组的行长度
int rowLength=parseArr[0][0];
//获取要转换的二维数组的列的长度
int colLength=parseArr[0][1];
//声明二维数组
int chessArr=new int[rowLength][colLength];
//在读取稀疏数组后几行的数据(从第二行开始),构建二维数组
for(int i=1;i<parseArr.length;i++){
chessArr[parseArr[i][0]][parseArr[i][1]]=parseArr[i][2];
}
return chessArr;
}
}