Java数据结构与算法----将稀疏数组保存到磁盘,并恢复


练习:

将稀疏数组保存到磁盘,并恢复


//稀疏数组保存到磁盘,并恢复
import java.io.*;
import java.io.OutputStreamWriter;
import java.io.InputStreamReader;
public class SparseArrSave{
	
	public static void main(String[] args){
		
	
		int[][] chessArr1 =new int[11][11];
		chessArr1[1][2]=1;
		chessArr1[2][3]=2;
		chessArr1[4][5]=2;
		chessArr1[4][6]=1;//添加一个数据
		int count=0;
		System.out.println("原始数组:");
		for(int[] row:chessArr1){
			for(int data:row){
				if(data!=0)
					count++;
				System.out.printf("%d\t",data);
			}
			System.out.println();
		}

		System.out.println("有效个数:"+count);
		int[][] sparseArr=new int[count+1][3];
		int num=1;
		sparseArr[0][0]=chessArr1.length;
		sparseArr[0][1]=chessArr1[0].length;
		sparseArr[0][2]=count;
		
		for(int i=0;i<11;i++){
			for(int j=0;j<11;j++){
				if(chessArr1[i][j]!=0){
					sparseArr[num][0]=i;
					sparseArr[num][1]=j;
					sparseArr[num][2]=chessArr1[i][j];
					num++;
				}
			}
		}

		System.out.println("稀疏数组:");
		System.out.println("row"+"\t"+"col"+"\t"+"val");
		for(int i=0;i<sparseArr.length;i++){	
			System.out.printf("%d\t%d\t%d\t\n",sparseArr[i][0],sparseArr[i][1],sparseArr[i][2]);
		
		}
		
		try{
		System.out.println("创建/打开文档");
		File f=new File("E:\\java_code\\datastructures_code\\save\\sparse.txt");
		FileOutputStream f1=new FileOutputStream(f);
		OutputStreamWriter outf=new OutputStreamWriter(f1,"UTF-8");
		System.out.println("写入中………………");
			for(int i=0;i<sparseArr.length;i++){
			//不会出错,因为Java自动转为String
			//outf.write(sparseArr[i][0]+","+sparseArr[i][1]+","+sparseArr[i][2]+",");
			//出错,String跟int会乱码
			// outf.write(sparseArr[i][0]);
			// outf.write(",");
			// outf.write(sparseArr[i][1]);
			// outf.write(",");
			// outf.write(sparseArr[i][2]);
			// outf.write(",");
			
		
			outf.write(String.valueOf(sparseArr[i][0]));
			outf.write(",");
			outf.write(String.valueOf(sparseArr[i][1]));
			outf.write(",");
			outf.write(String.valueOf(sparseArr[i][2]));
			outf.write(",");

		}
		outf.close();
		f1.close();
		System.out.println("写入成功");
		System.out.println("读取中………………");
		FileInputStream f2=new FileInputStream(f);
		InputStreamReader inf=new InputStreamReader(f2,"UTF-8");
		StringBuffer sb=new StringBuffer();
		while(inf.ready()){
			sb.append((char)inf.read());
		}
		inf.close();
		f2.close();
		System.out.println("读取成功");
		String ss=sb.toString();
		String[] sb1=sb.toString().split(",");
		System.out.println("读取数据字符串为:");
		System.out.println(ss);
		
		int num2=1;
		int[][] sp=new int[sb1.length/3][3];
		sp[0][0]=Integer.parseInt(sb1[0]);
		sp[0][1]=Integer.parseInt(sb1[1]);
		sp[0][2]=Integer.parseInt(sb1[2]);
		for(int i=3;i<sb1.length;i+=3){
			sp[num2][0]=Integer.parseInt(sb1[i]);
			sp[num2][1]=Integer.parseInt(sb1[i+1]);
			sp[num2][2]=Integer.parseInt(sb1[i+2]);
			num2++;
		}
		System.out.println("还原稀疏数组:");
		System.out.println("row"+"\t"+"col"+"\t"+"val");
		for(int[] row:sp){
			for(int data:row){
				System.out.printf("%d\t",data);
			}
			System.out.println();
		}
		
		System.out.println("还原原始数组:");
		int[][] chessArr2=new int[sp[0][0]][sp[0][1]];
		for(int i=1;i<sp.length;i++){
			chessArr2[sp[i][0]][sp[i][1]]=sp[i][2];
		}

		for(int[] row:chessArr2){
			for(int data:row){
				System.out.printf("%d\t",data);
			}
			System.out.println();
		}
		
		}catch(IOException e){
			e.printStackTrace();
		}
		//写在外面读取不到sp的
		// System.out.println("还原原始数组:");
		// int[][] chessArr2=new int[sp[0][0]][sp[0][1]];
		// //赋值
		// for(int i=1;i<sp.length;i++){
			// chessArr2[sp[i][0]][sp[i][1]]=sp[i][2];
		// }
		// //打印生成还原的数组
		// System.out.println("还原的数组:");
		// for(int[] row:chessArr2){
			// for(int data:row){
				// System.out.printf("%d\t",data);
			// }
			// System.out.println();
		// }
		
		
		
	}
}

结果:

E:\java_code\datastructures_code\save>java SparseArrSave
原始数组:
0       0       0       0       0       0       0       0       0       0       0
0       0       1       0       0       0       0       0       0       0       0
0       0       0       2       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       2       1       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
有效个数:4
稀疏数组:
row     col     val
11      11      4
1       2       1
2       3       2
4       5       2
4       6       1
创建/打开文档
写入中………………
写入成功
读取中………………
读取成功
读取数据字符串为:
11,11,4,1,2,1,2,3,2,4,5,2,4,6,1,
还原稀疏数组:
row     col     val
11      11      4
1       2       1
2       3       2
4       5       2
4       6       1
还原原始数组:
0       0       0       0       0       0       0       0       0       0       0
0       0       1       0       0       0       0       0       0       0       0
0       0       0       2       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       2       1       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0
0       0       0       0       0       0       0       0       0       0       0

总结:

  • 存进去是以字符串的数据类型
  • 出来时是char类型,读入到字符串缓存区中,最后恢复成字符串
  • 出来时是所有数据连在一起,所以需要进行拆分

发布了53 篇原创文章 · 获赞 4 · 访问量 1317

猜你喜欢

转载自blog.csdn.net/weixin_43351473/article/details/104661448
今日推荐