稀疏数组
一、main方法
代码如下(示例):
public static void main(String[] args)
{
//创建一个二维数组,输出
int chessArr1[][]=new int[11][11];
//int[][] chessArr1=new int[11][11];
chessArr1[1][2]=1;
chessArr1[2][3]=2;
chessArr1[6][8]=1;
chessArr1[7][9]=2;
System.out.println("原始二维数组:");
for(int[] row:chessArr1) {
for(int date: row) {
System.out.printf("%d\t", date);
}
System.out.println();
}
//调用toSparseArr方法,把二维数组转化为稀疏数组
int[][] sparseArr=ToSparseArr(chessArr1);
//调用WriterMapDate方法,把稀疏数组存储到map.date文件中
writerMapDate(sparseArr);
//调用readMapDate方法,读取map.date文件中稀疏数组
String[] sb1=readMapDate();
//调用ToChessArr方法,将读取的稀疏数组转换为二维数组
ToChessArr(sb1);
二、ToChessArr方法:二维数组转稀疏数组
代码如下(示例):
public static void ToChessArr(String[] sb1)
{
int num2=1;
int[][] sparseArr1=new int[sb1.length/3][3];
sparseArr1[0][0]=Integer.parseInt(sb1[0]);
sparseArr1[0][1]=Integer.parseInt(sb1[1]);
sparseArr1[0][2]=Integer.parseInt(sb1[2]);
for(int i=3;i<sb1.length;i+=3){
sparseArr1[num2][0]=Integer.parseInt(sb1[i]);
sparseArr1[num2][1]=Integer.parseInt(sb1[i+1]);
sparseArr1[num2][2]=Integer.parseInt(sb1[i+2]);
num2++;
}
System.out.println("还原稀疏数组:");
System.out.println("row"+"\t"+"col"+"\t"+"val");
for(int[] row:sparseArr1){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
System.out.println("还原原始数组:");
int[][] chessArr2=new int[sparseArr1[0][0]][sparseArr1[0][1]];
for(int i=1;i<sparseArr1.length;i++){
chessArr2[sparseArr1[i][0]][sparseArr1[i][1]]=sparseArr1[i][2];
}
for(int[] row:chessArr2){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}
三.writerMapDate()把稀疏数组写入文件
代码如下(示例):
public static void writerMapDate(int[][] sparseArr)
{
try{
System.out.println("创建/打开文档");
File f=new File(path);
FileOutputStream f1=new FileOutputStream(f);
OutputStreamWriter outf=new OutputStreamWriter(f1,"UTF-8");
System.out.println("写入中………………");
for(int i=0;i<sparseArr.length;i++){
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("写入成功");
}catch(IOException e){
e.printStackTrace();
}
}
四、readMapDate() 稀疏数组转二维数组:读取稀疏数组文件
代码如下(示例):
public static String[] readMapDate()
{
try
{
System.out.println("读取中………………");
FileInputStream f2=new FileInputStream(new File(path));
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);
return sb1;
}catch(IOException e){
e.printStackTrace();
}
return null;
}
五、ToChessArr()稀疏数组转二维数组
代码如下(示例):
public static void ToChessArr(String[] sb1)
{
int num2=1;
int[][] sparseArr1=new int[sb1.length/3][3];
sparseArr1[0][0]=Integer.parseInt(sb1[0]);
sparseArr1[0][1]=Integer.parseInt(sb1[1]);
sparseArr1[0][2]=Integer.parseInt(sb1[2]);
for(int i=3;i<sb1.length;i+=3){
sparseArr1[num2][0]=Integer.parseInt(sb1[i]);
sparseArr1[num2][1]=Integer.parseInt(sb1[i+1]);
sparseArr1[num2][2]=Integer.parseInt(sb1[i+2]);
num2++;
}
System.out.println("还原稀疏数组:");
System.out.println("row"+"\t"+"col"+"\t"+"val");
for(int[] row:sparseArr1){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
System.out.println("还原原始数组:");
int[][] chessArr2=new int[sparseArr1[0][0]][sparseArr1[0][1]];
for(int i=1;i<sparseArr1.length;i++){
chessArr2[sparseArr1[i][0]][sparseArr1[i][1]]=sparseArr1[i][2];
}
for(int[] row:chessArr2){
for(int data:row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}