稀疏数组与二维数组的互相转换
1、二维数组转稀疏数组
2、稀疏数组存文件
3、从文件读取稀疏数
4、稀疏数组还原二维数组
package com.ja.sparseArray;
import java.io.*;
public class SparseArray {
public static void main(String[] args){
int[][] arr;
int[][] sparseToArrs;
int[][] sparseArr;
int[][] fileSparseArr;
arr=creatArr();
System.out.println("创建的二维数组:");
forArr(arr);
sparseArr=arrToSparseArr(arr);
System.out.println("\n创建的二维数组转稀疏数组:");
forArr(sparseArr);
saveSparse(sparseArr);
fileSparseArr= fileReadSparse();
System.out.println("\n文件读取的稀疏数组:");
forArr(fileSparseArr);
sparseToArrs=sparseToArr(fileSparseArr);
System.out.println("\n文件读取的稀疏数组还原二维数组:");
forArr(sparseToArrs);
}
private static int[][] fileReadSparse() {
int[][] spare=null;
String path="d:/aa/data.demo";
try {
BufferedReader in= new BufferedReader(new InputStreamReader(new FileInputStream(path),"utf-8"));
int row=0;
String line;
while((line=in.readLine())!=null){
row++;
}
spare=new int[row][3];
BufferedReader againIn= new BufferedReader(new InputStreamReader(new FileInputStream("d:/aa/data.demo"),"utf-8"));
int r=0;
while((line=againIn.readLine())!=null){
String [] arr=line.split(" ");
for (int i = 0; i < arr.length; i++) {
spare[r][i]=Integer.parseInt(arr[i]);
}
r++;
}
in.close();
System.out.println("读取稀疏数组成功!!!");
} catch (Exception e) {
e.printStackTrace();
}
return spare;
}
private static void saveSparse(int[][] sparseArr) {
String path="d:/aa/data.demo";
try {
PrintWriter out= new PrintWriter(new OutputStreamWriter(new FileOutputStream(path),"utf-8"));
for (int i = 0; i <sparseArr.length; i++) {
for (int j = 0; j < sparseArr[1].length; j++) {
out.print(sparseArr[i][j]+" ");
}
out.println();
}
System.out.println("稀疏数组存盘成功!!!");
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
private static int[][] sparseToArr(int[][] sprseArr) {
int row=sprseArr[0][0];
int col=sprseArr[0][1];
int[][] arr=new int[row][col];
for (int i = 1; i < sprseArr.length; i++) {
arr[sprseArr[i][0]][sprseArr[i][1]]=sprseArr[i][2];
}
return arr;
}
private static int[][] arrToSparseArr(int[][] arr) {
int sum=forArr(arr,1);
int[][] sparseArr=new int[sum+1][3];
sparseArr[0][0]=arr.length;
sparseArr[0][1]=arr[0].length;
sparseArr[0][2]=sum;
sparseArr=forArr(arr,sparseArr);
return sparseArr;
}
private static int[][] forArr(int[][] arr,int[][] sparseArr) {
int n=1;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(arr[i][j]!=0){
sparseArr[n][0]=i;
sparseArr[n][1]=j;
sparseArr[n][2]=arr[i][j];
n++;
}
}
}
return sparseArr;
}
private static int forArr(int[][] arr) {
for (int[] row:arr
) {
for (int number :
row) {
System.out.print(number+" ");
}
System.out.println();
}
return 0;
}
private static int forArr(int[][] arr,int notNumber) {
int sum=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
if(arr[i][j]!=0){ sum++; }
}
}
return sum;
}
private static int[][] creatArr() {
int row=11;
int col=5;
int[][] arr=new int[row][col];
arr[1][2]=11;
arr[2][3]=2;
arr[3][4]=1;
return arr;
}
}
运行结果
创建的二维数组:
0 0 0 0 0
0 0 11 0 0
0 0 0 2 0
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
创建的二维数组转稀疏数组:
11 5 3
1 2 11
2 3 2
3 4 1
稀疏数组存盘成功!!!
读取稀疏数组成功!!!
文件读取的稀疏数组:
11 5 3
1 2 11
2 3 2
3 4 1
文件读取的稀疏数组还原二维数组:
0 0 0 0 0
0 0 11 0 0
0 0 0 2 0
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Process finished with exit code 0
Process finished with exit code 0