java实现二维数组和稀疏数组的转换,并实现存盘读盘功能

   最近学习了一下尚硅谷中的数据结构与算法,其中有这一部分,前半部分大概都和别人的逻辑差不太多,我只是做了一些方法的抽取,并完成了存盘的io,代码如下,仅供参考:

   

package dataStructure;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;


public class SparceArray {
	    //读档方法
	    static void getParseArray() {
	    	try {
				FileInputStream fis = new FileInputStream(new File("d:/io/save.data"));
				ObjectInputStream ois = new ObjectInputStream(fis);
				Object o = ois.readObject();
				int sparseArr[][] = (int[][]) o;
				printArr(sparseArr);
				ois.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
	    }
	    //存档方法
	    static void save(int sparseArr[][]) {
	    	try {
	    		String filePath = "d:/io/save.data";
		    	File dir = new File("d:/io");
		    	if (!dir.exists()) {
					dir.mkdir();				
				}
		    	File file = new File(filePath);
				file.createNewFile();
				ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(file));
				oos.writeObject(sparseArr);
				oos.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
	    }
	    //数组输出通用方法
		static void printArr(int[][] chessArr) {
			for (int[] row : chessArr) {
				for (int data : row) {
					System.out.printf("%d\t",data);
				}
				System.out.println();
			}
		}
		public static void main(String[] args) {
			//创建一个原始的二维数组 11*11;
			int chessArr1[][] = new int [11][11];
			chessArr1[1][1]=1;
			chessArr1[2][2]=2;
			chessArr1[3][3]=2;
			chessArr1[4][4]=2;
			chessArr1[5][5]=2;
			chessArr1[6][6]=1;
			//输出原始的二维数组
			System.out.println("原始二维数组~~");
			printArr(chessArr1);
			
			//将二维数组转稀疏数组的思想
			//1.先遍历二维数组得到非0的数据的个数
			int sum = 0;
			for (int i = 0; i < chessArr1.length; i++) {
				for (int j = 0; j < chessArr1.length; j++) {
					if (chessArr1[i][j]!=0) {
						sum++;
					}
				}
			}
			
			//2.创建对应的稀疏数组
			int sparseArr[][] = new int[sum+1][3];
			sparseArr[0][0]=chessArr1.length;
			sparseArr[0][1]=chessArr1.length;
			sparseArr[0][2]=sum;
			//3.遍历二维数组,将非0的值存到sparseArr中
			//用于记录第几个非0数据
			int count = 0;
			for (int i = 0; i < chessArr1.length; i++) {
				for (int j = 0; j < chessArr1.length; j++) {
					if (chessArr1[i][j]!=0) {
						count ++ ;
						sparseArr[count][0]=i;
						sparseArr[count][1]=j;
						sparseArr[count][2]=chessArr1[i][j];
					}
				}
			}
			//4.打印稀疏数组
			System.out.println("得到的稀疏数组为~~~~~");
			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]);
			}
			//5.稀疏数组转回二维数组
			//5.1 生成二维数组
			int [][] recoverArr = new int [sparseArr[0][0]][sparseArr[0][1]];
			for (int i = 1; i < sparseArr.length; i++) {
				recoverArr[sparseArr[i][0]][sparseArr[i][1]]=sparseArr[i][2];
			}
			System.out.println("还原后的数组~~~~~~~~~~");
			printArr(recoverArr);
			save(sparseArr);
			System.out.println("获取存储文件中的数组~~~~~~~~~~~~~~");
			getParseArray();
		}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值