- 含义:稀疏数组一般是将一个数组中有意义的值的信息存放在另一个数组中。
- 结构:数组的行数为有意义的值加1,列数一般为3,分别表示横向下标,纵向下标,值。第一行一般存原始数组的行数,原始数组的列数,以及有意义的值的个数。根据情况可以调整
- 优点:可以对数据进行压缩。
- 实现代码:
package day1;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
public class 稀疏数组 {
public static void main(String[] args) {
int chessArr[][]=new int[11][11];
chessArr[1][2]=1;
chessArr[2][3]=2;
for(int[]row:chessArr) {
for(int data:row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
int sum=0;
for(int i=0;i<chessArr.length;i++) {
for(int j=0;j<chessArr.length;j++) {
if(chessArr[i][j]!=0) {
sum++;
}
}
}
int sparseArr[][]=new int[sum+1][3];
sparseArr[0][0]=chessArr.length;
sparseArr[0][1]=chessArr.length;
sparseArr[0][2]=sum;
int count=1;
for(int i=0;i<chessArr.length;i++) {
for(int j=0;j<chessArr.length;j++) {
if(chessArr[i][j]!=0) {
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=chessArr[i][j];
count++;
}
}
}
File f=new File("D:/A.txt");
FileWriter fw=null;
if(!f.exists()) {
try {
f.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
fw=new FileWriter(f);
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]);
}
for(int i=0;i<sparseArr.length;i++) {
fw.write(sparseArr[i][0]+"\t");
fw.write(sparseArr[i][1]+"\t");
fw.write(sparseArr[i][2]+"\n");
}
} catch (IOException e) {
System.out.println("读取失败");
}
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
reviveArr(sum);
}
public static void reviveArr(int sum) {
BufferedReader re=null;
try {
re=new BufferedReader(new FileReader(new File("D://A.txt")) );
String line="";
try {
line="";
int [][]sparse=new int[sum+1][3];
int x=0;
while((line=re.readLine())!=null) {
String str1[]=line.split("\t");
for(int i=0;i<str1.length;i++) {
System.out.println(str1[i]+"str");
sparse[x][i]=Integer.parseInt(str1[i]);
System.out.println( sparse[i][x]+"sp");
}
x++;
}
for(int i=0;i<sparse.length;i++) {
System.out.printf("%d\t%d\t%d\t\n",sparse[i][0],sparse[i][1],sparse[i][2]);
}
System.out.println(sparse[0][0]+"sp1");
int chessArray[][]=new int[sparse[0][0]][sparse[0][1]];
for(int i=1;i<sparse.length;i++) {
chessArray[sparse[i][0]][sparse[i][1]]=sparse[i][2];
}
for(int[]row:chessArray) {
for(int data:row) {
System.out.printf("%d\t",data);
}
System.out.println();
}
} catch (IOException e) {
}
} catch (FileNotFoundException e) {
}
try {
re.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}