项目结构:
SparseArrayGet用于从硬盘中获取文件,另一个反之。

SparseArraySave类:
运行效果:


SparseArraySave代码:
package com.稀疏数组;
/**
* 利用稀疏数组来保存数据(降低内存消耗),模拟存档和取档过程(棋盘游戏)
*/
import java.io.*;
import java.util.Arrays;
public class SparseArraySave implements Serializable{
int [][]arr =new int[11][11];
int [][] sparseArr;
public static void main(String[] args) throws Exception {
SparseArraySave sparseArraySave = new SparseArraySave();
//将数组转化为稀疏数组
sparseArraySave.sparseArrayFormat();
//将稀疏数组存储到内存
sparseArraySave.sparseArraySave();
}
private void sparseArraySave() {
BufferedWriter bufferedWriter=null;
try {
bufferedWriter=new BufferedWriter(new FileWriter("arr.txt",true));
// 一行一行的写入
// for (int[] a:
// sparseArr) {
// bufferedWriter.write(Arrays.toString(a));
// bufferedWriter.write("\n");
// }
//保存sparseArr的数据,这里采用了一个元素一个元素的写入
for(int i=0;i<sparseArr.length;i++) {
for(int j=0;j<3;j++) {
bufferedWriter.write(sparseArr[i][j]+"\t");
}
bufferedWriter.write("\n");//换行
}
} catch (Exception e) {
System.out.println("保存失败");
}
finally {
try {
bufferedWriter.close();
System.out.println("保存成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void sparseArrayFormat() {
arr[1][5]=20;
arr[0][5]=10;
arr[1][2]=2;
arr[5][5]=22;
arr[10][5]=70;
System.out.println("保存文件前的相互转换:");
System.out.println("转换前:");
// System.out.println(Arrays.toString(arr));
for (int a[]:
arr) {
System.out.println(Arrays.toString(a));
}
//找出原数组的行数列数
int row=arr.length;
int cloumn=arr[0].length;
//num为统计原数组不为0的个数
int num=0;
for(int i=0;i<row;i++) {
for(int j=0;j<cloumn;j++) {
if(arr[i][j]!=0) {
num++;
}
}
}
//给sparseArr的第一行赋值
sparseArr=new int[num+1][3];
sparseArr[0][0]=row;
sparseArr[0][1]=cloumn;
sparseArr[0][2]=num;
//给sparseArr的其他行赋值
int count=1;
for(int i=0;i<row;i++) {
for(int j=0;j<cloumn;j++) {
if(arr[i][j]!=0) {
sparseArr[count][0]=i;
sparseArr[count][1]=j;
sparseArr[count][2]=arr[i][j];
count++;
}
}
}
//转换后输出:
System.out.println("转换后:");
// System.out.println(Arrays.toString(sparseArr));
for (int a[]:
sparseArr) {
System.out.println(Arrays.toString(a));
}
}
}SparseArrayGet类:
运行效果:

SparseArrayGet代码:
package com.稀疏数组;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class SparseArrayGet {
int[][] arr;
List<Integer> sparseArr=new ArrayList<>();
public static void main(String[] args) throws IOException {
SparseArrayGet sparseArrayGet = new SparseArrayGet();
//从内存中读取稀疏数组
sparseArrayGet.sparseArrayGet();
//将稀疏数组转化为二维数组
sparseArrayGet.sparseArrayParse();
}
private void sparseArrayGet() throws IOException {
System.out.println("读取文件前的相互转换:");
System.out.println("转换前:");
BufferedReader bufferedReader=null;
try {
bufferedReader=new BufferedReader(new FileReader("arr.txt"));
//读取方式一
// char[] ch=new char[1024];
// int len=0;
// while((len=bufferedReader.read(ch))!=-1) {
// System.out.println(ch);
// }
//读取方法二
String line=null;
while ((line=bufferedReader.readLine())!=null) {
String[] split = line.split("\t");
for (int i = 0; i <split.length; i++) {
sparseArr.add(Integer.parseInt(split[i]));
}
}
System.out.println(sparseArr);
} catch (FileNotFoundException e) {
System.out.println("读取失败");
}
finally {
try {
bufferedReader.close();
System.out.println("读取成功");
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void sparseArrayParse() {
System.out.println("转换后:");
arr=new int[sparseArr.get(0)][sparseArr.get(1)];
for(int i=3;i<sparseArr.size();i=i+3) {
arr[sparseArr.get(i)][sparseArr.get(i+1)]=sparseArr.get(i+2);
}
//输出arr
for (int []a:
arr) {
System.out.println(Arrays.toString(a));
}
}
}
版权声明:本文为qq_52135683原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。