Java实现稀疏数组以及将稀疏数组存储到硬盘和从硬盘种读取操作(主要考察稀疏数组的定义与IO流)

项目结构:

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版权协议,转载请附上原文出处链接和本声明。