Java实现稀疏数组,可存储在硬盘,可恢复原数组

it2026-01-31  2

Java实现稀疏数组,可存储在硬盘,可恢复原数组

package com.suanfa; import java.io.*; public class SpareseArray { public static void main(String[] args) { // 将数组初始化并转换为稀疏数组 int sparese[][] = ArrChangeSpr(InitArray()); PrinArray(sparese); // 将稀疏数组存储在硬盘上 SprToDisk(sparese); // 将稀疏数组从硬盘中取出,并转换为普通数组 PrinArray(SprChangeArr(DiskTosqr())); } /** * 打印数组 * @param arr 一个二维数组 */ public static void PrinArray(int[][] arr){ for (int[] arra : arr) { for (int value : arra) { System.out.print(value+" "); } System.out.println(); } } /** * 初始化一个二维数组 * * @return 一个已经初始化了的二维数组 */ public static int[][] InitArray() { // 1.创建初始棋盘,并初始化棋子 int array[][] = new int[11][11]; array[1][2] = 1; array[2][3] = 2; return array; } /** * 将二维数组转化为稀疏数组 * * @param surceArray 一个已经初始化了的二维数组 * @return 返回一个稀疏数组 */ public static int[][] ArrChangeSpr(int[][] surceArray) { int sum = 0; int apareRow = 1, col = 0; // 2.将二维数组转换为稀疏数组 // 先遍历数组得到不为零的值的个数 for (int[] row : surceArray) { for (int data : row) { if (data != 0) { ++sum; } } } // System.out.println(sum); // 创建对应的稀疏数组 int spareArr[][] = new int[sum + 1][3]; spareArr[0][0] = 11; spareArr[0][1] = 11; spareArr[0][2] = sum; // 给稀疏数组赋值,把+sum的值赋进去 for (int i = 0; i != surceArray.length; ++i) { for (int j = 0; j != surceArray[0].length; ++j) { if (surceArray[i][j] != 0) { spareArr[apareRow][0] = i; spareArr[apareRow][1] = j; spareArr[apareRow++][2] = surceArray[i][j]; } } } return spareArr; } /** * 将稀疏数组转化为普通的二维数组 * * @param array 一个稀疏数组 * @return 一个普通二维数组 */ public static int[][] SprChangeArr(int[][] array) { // 将稀疏数组恢复为原来的数组 int cheseArr2[][] = new int[array[0][0]][array[0][1]]; for (int i = 1; i != array.length; ++i) { cheseArr2[array[i][0]][array[i][1]] = array[i][2]; } return cheseArr2; } /** * 将稀疏数组存放在硬盘中,使用数据流。 * @param sqp 一个稀疏数组 * @throws IOException 抛出IO异常 */ public static void SprToDisk(int[][] sqp){ // 创建数据专属的字节输出流 DataOutputStream out=null; try { out=new DataOutputStream(new FileOutputStream("F:/test/test.dat")); //地址可以随便更改 for (int[] arra : sqp) { for (int value : arra) { try { out.writeInt(value); } catch (IOException e) { e.printStackTrace(); } } } } catch (FileNotFoundException e) { e.printStackTrace(); }finally { if (out!=null){ try { out.flush(); } catch (IOException e) { e.printStackTrace(); } try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 从硬盘中读取稀疏数组 * @return 返回一个稀疏数组 */ public static int[][] DiskTosqr(){ int sqr[][]=new int[3][3]; DataInputStream fis= null; try { fis = new DataInputStream(new FileInputStream("F:/test/test.dat")); for (int i=0;i<sqr.length;++i){ for (int j=0;j<sqr[0].length;++j){ sqr[i][j]=fis.readInt(); } } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (fis!=null){ try { fis.close(); } catch (IOException e) { e.printStackTrace(); } } } return sqr; } }
最新回复(0)