我是靠谱客的博主 朴素灰狼,最近开发中收集的这篇文章主要介绍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("%dt",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("%dt%dt%dtn",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("%dt",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("%dt",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("%dt",data);
// }
// System.out.println();
// }
}
}

结果:

E:java_codedatastructures_codesave>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类型,读入到字符串缓存区中,最后恢复成字符串
  • 出来时是所有数据连在一起,所以需要进行拆分

最后

以上就是朴素灰狼为你收集整理的Java数据结构与算法----将稀疏数组保存到磁盘,并恢复的全部内容,希望文章能够帮你解决Java数据结构与算法----将稀疏数组保存到磁盘,并恢复所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(44)

评论列表共有 0 条评论

立即
投稿
返回
顶部