- Java实现稀疏数组
- 原二维数组—>稀疏数组
- 稀疏数组—>原二维数组
- 将稀疏数组保存到硬盘中
- 将稀疏数组读入内存
- 为了扩展思维,练习编程,所以写法不一
- 从上到下看就好,没有对函数进行封装
package zc;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class SparseArray {
public static void main(String[] args) {
int[][] arr=new int[11][11];
arr[0][0]=1;
arr[1][1]=2;
arr[5][6]=3;
System.out.println("-----------------二维数组----------------------------");
for(int[] row:arr) {
for(int data:row) {
System.out.print(data+"\t");
}
System.out.println();
}
int sum=0;
for(int[] row:arr) {
for(int data:row) {
sum=data!=0?sum+1:sum;
}
}
System.out.println(sum);
int sparseArr[][]=new int[sum+1][3];
sparseArr[0][0]=arr.length;
sparseArr[0][1]=arr[0].length;
sparseArr[0][2]=sum;
int count=0;
for(int i=0;i<arr.length;i++) {
for(int j=0;j<arr[0].length;j++) {
if(arr[i][j]!=0) {
sparseArr[++count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=arr[i][j];
}
}
}
System.out.println("-----------------稀疏数组---------------------------");
for(int[] row:sparseArr) {
for(int data:row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
int [][] arr2;
arr2=new int[sparseArr[0][0]][sparseArr[0][1]];
for(int i=1;i<sparseArr.length;i++) {
arr2[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
}
System.out.println("-----------------还原后二维数组-------------------");
for(int[] row:arr2) {
for(int data:row) {
System.out.print(data+"\t");
}
System.out.println();
}
File dest=new File("sparesArray.data");
try (BufferedWriter bw=new BufferedWriter(new FileWriter(dest));){
for(int[] row:sparseArr) {
for(int data:row) {
bw.write(data+"\t");
}
bw.write("\n");
bw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}
File src=new File("sparesArray.data");
BufferedReader br=null;
List<Integer> list=new ArrayList<>();
try {
br=new BufferedReader(new FileReader(src));
String line;
while((line=br.readLine())!=null) {
String[] str=line.split("\t");
for(int i=0;i<str.length;i++) {
list.add(Integer.parseInt(str[i]));
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
if(br!=null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
System.out.println("稀疏数组的行数为: "+list.get(2)+1);
int sparseArr2[][]=new int[list.get(2)+1][3];
int j=0;
for(int i=0;i<list.size();i=i+3) {
sparseArr2[j][0]=list.get(i);
sparseArr2[j][1]=list.get(i+1);
sparseArr2[j][2]=list.get(i+2);
j++;
}
System.out.println("-----------------从硬盘种读取的稀疏数组---------------------------");
for(int[] row2:sparseArr2) {
for(int data:row2) {
System.out.printf("%d\t",data);
}
System.out.println();
}
}
}