稀疏数组
稀疏数组:压缩存储、二维组坐标位置
- 如图:二维数组
- 存取图上数组 1 2数组
第一行: 前1和2是 二维数组的描述 11行 11列 最后2 表示有个两数
第二行: 1 行 2列 1具体的值
代码实现
public static void main(String[] args) {
//定义11*11的二维数组 0表示没有棋子 1表示白棋 2表示黑棋
//存文件id
int id =1;
int row =11;
int col =11;
int chessArray[][] =new int[row][col];
chessArray[1][2] =1;
chessArray[2][3] =2;
//输出原始二维数组
//有效数个数
int sum=0;
System.out.println("原始二维数组");
for(int [] rowone:chessArray){
for (int data:rowone){
System.out.printf("%d\t",data);
if(data != 0){
sum++;
}
}
System.out.println();
}
//创建稀疏维数
int sparseArray[][] =new int[sum+1][3];
//稀疏第一行数据
sparseArray[0][0]=row;
sparseArray[0][1]=col;
sparseArray[0][2]=sum;
//赋值稀疏数组
int count =0;
System.out.println("稀疏数组");
for(int i =0;i<row;i++){
for(int j=0;j<col;j++){
if(chessArray[i][j] != 0){
count++;
sparseArray[count][0]=i;
sparseArray[count][1]=j;
sparseArray[count][2]=chessArray[i][j];
}
}
}
//打印稀数组
for (int[] i :sparseArray){
for(int data:i){
System.out.printf("%d\t",data);
}
System.out.println();
}
//稀疏
int chessArrayOne[][] =new int [sparseArray[0][0]][sparseArray[0][1]];
//转为二维数组
for (int i=1;i<sum+1;i++){
chessArrayOne[sparseArray[i][0]][sparseArray[i][1]]=sparseArray[i][2];
}
//打印
System.out.println("恢复二维数组");
for(int [] rowone:chessArrayOne){
for (int data:rowone){
System.out.printf("%d\t",data);
if(data != 0){
}
}
System.out.println();
}
}
}
自己总结
1.优点:节省内存空间
2.缺点:消耗时间成本