稀疏数组
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组的处理方法是:
记录数组一共有几行几列,有多少个不同的值
把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
稀疏数组图片
稀疏数组_文件相互转换
Java课后题_稀疏数组_文件相互转换
package com.lixunhuan.sparsearray;
import java.io.*;
public class SparseArrToMapdata {
public static void main(String[] args) throws IOException {
/***
* 一、稀疏数组转为文件map.data 为了验证正确性,请用记事本打开此文件
*/
//稀疏数组的给定,那简单的:1代表黑子,2代表蓝子
int sparseArr[][] = new int [3][3];
sparseArr[0][0] =11;
sparseArr[0][1] =11;
sparseArr[0][2] =2;
sparseArr[1][0] =4;
sparseArr[1][1] =5;
sparseArr[1][2] =1;
sparseArr[2][0] =7;
sparseArr[2][1] =8;
sparseArr[2][2] =0;
//1.创建源
File dest = new File("d:\\map.data");
//2.选择流:解释一下之所以选择字符流进行操作,主要由于分割方便
Writer os = null;
os = new FileWriter(dest);
//3.进行数据的拷贝,其中\t,即table符号作为分隔符
for (int i = 0; i < sparseArr.length; i++) {
for (int j = 0; j < 3; j++) {
os.write(sparseArr[i][j]+"\t");
}
os.write("\r\n");
}
//4.释放资源
os.close();
/**
* 二、将本地文件map.data转换为稀疏数组
*/
//1.创建源
File src = new File("d:\\map.data");
//2.选择流
BufferedReader in = new BufferedReader(new FileReader(src));
//3.1进行数据的搬移,但是数组首要考虑的事情是数组要多大?
int row =0;//用于创建要创建的二维稀疏数组的大小确定
String line; //一行数据
//逐行读取,统计该稀疏数组一共有多少行
while ((line = in.readLine()) != null) {
row++;
}
//定义稀疏数组
int sparseArr2[][] = new int [row][3];
//3.2文本数据转移到稀疏数组中
int rowtmp = 0;
//由于读取完毕整个文本文档,所以不妨”重启“流
in.close();
in = new BufferedReader(new FileReader(src));
while ((line = in.readLine()) != null) {
String[] temp = line.split("\t");
for (int j = 0; j < temp.length; j++) {
sparseArr2[rowtmp][j]=Integer.parseInt(temp[j]);
}
rowtmp++;
}
//4.关闭流
in.close();
//验证文件读取是否正确
for(int[]temp1:sparseArr2) {
for (int temp2 : temp1) {
System.out.printf("%d\t", temp2);
}
System.out.println();
}
}
}
注意事项:
对于BufferedReader类中的readLine在代码中第一次用的目的是为了得到所需要创建数组的合适大小;
遍历完文件的所有行之后,需要进行流的“重启”再次定位到文件第一行,进行遍历,即数据的读取