package com.lb.sparsearrays;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
/**
- @desc 稀疏数组
- @author lb
- @date 2020-07-17
*/
public class SparseArrays {
public static void main(String[] args) {
System.out.println("初始化数组~~~");
int[][] initArr = new int[11][11];
initArr[1][2] = 1;
initArr[2][3] = 2;
initArr[3][4] = 1;
for (int[] is : initArr) {
for (int is2 : is) {
System.out.printf("%d\t", is2);
}
System.out.println("\n");
}
System.out.println("初始稀疏数组~~~");
// 1.获取数组内有多少个非0数据
int count = 0;
for (int[] is : initArr) {
for (int is2 : is) {
if (0 != is2) {
count++;
}
}
}
System.out.println("count:" + count);
int[][] sparseArr = new int[count + 1][3];
sparseArr[0][0] = initArr.length;
sparseArr[0][1] = initArr[0].length;
sparseArr[0][2] = count;
// 2.创建稀疏数组
int num = 0;
for (int i = 0; i < initArr.length; i++) {
for (int j = 0; j < initArr[0].length; j++) {
if (0 != initArr[i][j]) {
num++;
sparseArr[num][0] = i;
sparseArr[num][1] = j;
sparseArr[num][2] = initArr[i][j];
}
}
}
// 3.打印初始化的稀疏数组
for (int[] is : sparseArr) {
for (int is2 : is) {
System.out.printf("%d\t", is2);
}
System.out.println("\n");
}
System.out.println("把稀疏数组保存到文件中-----创建/打开文档");
try {
File f = new File("D:\\save\\a\\sparse.txt");
if (!f.exists()) {
f.getParentFile().mkdirs();
f.createNewFile();
}
FileOutputStream f1 = null;
OutputStreamWriter outf = null;
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(f)));
f1 = new FileOutputStream(f);
outf = new OutputStreamWriter(f1, "UTF-8");
System.out.println("写入中………………");
// 3.打印初始化的稀疏数组
for (int[] is : sparseArr) {
for (int is2 : is) {
outf.write(is2 + "\t");
}
outf.write("\r\n");
}
outf.flush();
System.out.println("写入完成………………");
System.out.println("读取中………………");
String line = null;
int row = 0;
int[][] sArr = null;
while ((line = bufferedReader.readLine()) != null) {
String[] splitArr = line.split("\t");
if (row == 0) {
sArr = new int[Integer.parseInt(splitArr[splitArr.length - 1]) + 1][Integer
.parseInt(splitArr[splitArr.length - 1])];
}
for (int i = 0; i < splitArr.length; i++) {
sArr[row][i] = Integer.parseInt(splitArr[i]);
}
row++;
}
System.out.println("读取完成………………");
// 打印重文件中读取的稀疏数组
System.out.println("打印从文件中读取的稀疏数组........");
for (int[] is : sArr) {
for (int is2 : is) {
System.out.printf("%d\t", is2);
}
System.out.println("\n");
}
outf.close();
f1.close();
bufferedReader.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("稀疏数组转为普通数组~~");
// 4.稀疏数组转为普通数组
int[][] cArr = new int[sparseArr[0][0]][sparseArr[0][1]];
for (int i = 1; i < sparseArr.length; i++) {
for (int j = 0; j < sparseArr[0].length; j++) {
cArr[sparseArr[i][0]][sparseArr[i][1]] = sparseArr[i][2];
}
}
// 5.打印初始化的普通数组
for (int[] is : cArr) {
for (int is2 : is) {
System.out.printf("%d\t", is2);
}
System.out.println("\n");
}
}
}