将二维数组转换成稀疏数组存盘, 读取并将其恢复成二维数组
package sparsearray;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.util.Arrays;
public class SpraseArray {
public static void main(String[] args) {
int[][] arr = new int[11][11];
arr[1][2] = 1;
arr[2][3] = 2;
System.out.println("原始的二维数组~");
for(int[] row : arr){
for(int data : row){
System.out.printf("%d\t",data);
}
System.out.println();
}
int sum = 0;
for(int i = 0 ; i < 11; i++){
for(int j = 0 ; j < 11 ; j++){
if(arr[i][j] != 0){
sum++;
}
}
}
System.out.println("sum:" +sum);
int sparseArr[][] = new int[sum+1][3];
sparseArr[0][0] = 11;
sparseArr[0][1] = 11;
sparseArr[0][2] = sum;
int count = 0 ;
for(int i = 0 ; i < 11; i++){
for(int j = 0 ; j < 11 ; j++){
if(arr[i][j] != 0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = arr[i][j];
}
}
}
System.out.println();
System.out.println("得到的稀疏数组~");
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]);
}
System.out.println();
File file = new File("D:\\text");
String filename = "SparseArr.txt";
OutputStream os = null;
BufferedWriter bufferedWriter = null;
try {
if(!file.exists()){
file.mkdirs();
}
os = new FileOutputStream(file.getPath() + File.separator + filename);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("D://text/SparseArr.txt")));
String write = null;
for(int i = 0 ; i < sparseArr.length ; i++){
for(int j = 0 ; j < sparseArr.length; j++){
write = "" + sparseArr[i][j]+"\n";
bufferedWriter.write(write);
}
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bufferedWriter.flush();
bufferedWriter.close();
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
String filepath = "D://text/sparseArr.txt";
readFile(filepath,sum);
}
public static void readFile(String filepath ,int sum){
File file = new File(filepath);
BufferedReader bufferedReader =null;
int[][]sparseArr = new int[sum+1][3];
try {
if(file.exists() && file.isFile()){
file.createNewFile();
}
bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file)));
String str =" ";
for(int i = 0 ; i < sparseArr.length;i++){
for(int j = 0 ; j < sparseArr.length; j++){
str = bufferedReader.readLine();
sparseArr[i][j] = Integer.parseInt(str);
System.out.println("arr["+i+"]["+j+"]:"+sparseArr[i][j]);
}
}
System.out.println();
System.out.println("读取文件的稀疏数组~");
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]);
}
System.out.println();
int[][] arr = new int[sparseArr[0][0]][sparseArr[0][1]];
for(int i = 1 ; i < sparseArr.length; i++){
arr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
System.out.println();
System.out.println("转换后的二维数组~");
for(int[] row : arr){
for(int data : row){
System.out.printf("%d\t",data);
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}