文章目录
package com.scy.sparsearray;
import java.io.*;
public class SparseArray {
public static void main(String[] args) throws FileNotFoundException {
int chessArr1[][] = new int[11][11];
chessArr1[1][2] = 1;
chessArr1[2][3] = 2;
System.out.println("原始的二维数组");
for (int[] row: chessArr1){
for (int data: row){
System.out.printf("%d\t",data);
}
System.out.println();
}
int sum = 0;
for (int i=0;i<chessArr1.length;i++){
for (int j=0;j<chessArr1[i].length;j++){
if (chessArr1[i][j] !=0){
sum++;
}
}
}
System.out.println(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<chessArr1.length;i++){
for (int j=0;j<chessArr1[i].length;j++){
if (chessArr1[i][j] !=0){
count++;
sparseArr[count][0] = i;
sparseArr[count][1] = j;
sparseArr[count][2] = chessArr1[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("稀疏数组持久化写入磁盘");
FileWriter fileWriter=null;
try {
fileWriter= new FileWriter(new File("D:\\sparseArray.data"));
for (int[] row : sparseArr) {
fileWriter.write(row[0]+"\t"+row[1]+"\t"+row[2]);
fileWriter.write("\r\n");
}
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
BufferedReader fileReader = new BufferedReader(new FileReader("D:\\sparseArray.data"));
boolean isNotRead=false;
int[][] sparseArray2 = null;
try {
String lineStr=null;
int curCount=0;
while((lineStr=fileReader.readLine())!=null) {
String[] tempStr=lineStr.split("\t");
if (!isNotRead){
sparseArray2=new int[Integer.parseInt(tempStr[2])+1][3];
sparseArray2[curCount][0]=Integer.parseInt(tempStr[0]);
sparseArray2[curCount][1]=Integer.parseInt(tempStr[1]);
sparseArray2[curCount][2]=Integer.parseInt(tempStr[2]);
curCount++;
isNotRead=true;
}else {
sparseArray2[curCount][0]=Integer.parseInt(tempStr[0]);
sparseArray2[curCount][1]=Integer.parseInt(tempStr[1]);
sparseArray2[curCount][2]=Integer.parseInt(tempStr[2]);
curCount++;
}
}
System.out.println("从磁盘恢复稀疏数组");
for (int[] row: sparseArray2){
for (int data: row){
System.out.printf("%d\t",data);
}
System.out.println();
}
}catch (IOException e){
e.printStackTrace();
}finally {
try {
fileReader.close();
}catch (IOException e){
e.printStackTrace();
}
}
int chessArr2[][] = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i =1;i<sparseArr.length;i++){
chessArr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
System.out.println("恢复后的二维数组");
for (int[] row : chessArr2) {
for (int data : row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}