Java教程

JAVA稀疏数组-二维数组的压缩以及写入与读取

本文主要是介绍JAVA稀疏数组-二维数组的压缩以及写入与读取,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

个人学习记录:希望大家能多多交流 提出宝贵意见 互帮互助 共同进步

喜欢把注释写的比较详细,可忽略。

加油!加油!加油!

 

package com.eliauk.sparsearray;

import java.io.*;

/**
 * @author  Eliauk
 * @version 1.0.0
 * @ClassName SparseArrayToFileAgin.java
 * @Description 稀疏数组的转化过程和硬盘存储以及读取的IO流
 * @createTime 2021年05月12日 09:17:00
 */
public class SparseArrayToFileAgin {

    public static void main(String[] args) {
        /**
         * 1.创建一个二维数组,实现二维数组对稀疏数组的过程转化
         * 2.将稀疏数组写入到硬盘中
         * 3.读取硬盘中的数据,恢复成原二维数组
         */
        //创建二维数组
        int chessArray[][] = new int[11][12];
        chessArray[1][1] = 1;
        chessArray[2][2] = 2;
        chessArray[3][3] = 3;
        chessArray[4][4] = 4;
        //SUM 记录数组中的有效元素
        int sum = 0;
        for(int[] row : chessArray){
            for(int temp : row){
                if(temp != 0){
                    sum++;
                }
                System.out.printf("%d\t",temp);
            }
            System.out.println("");
        }

        System.out.println("数组中有效元素的个数为:"+sum);

        //创建稀疏数组
        int sparseArray[][] = new int[sum+1][3];
        //给稀疏数组赋值
        sparseArray[0][0] = chessArray.length;
        sparseArray[0][1] = chessArray[0].length;
        sparseArray[0][2] = sum;
        //定义一个迭代器  用来记录稀疏数组的行数
        int count = 0;
        for(int i = 0;i<chessArray.length;i++){
            for(int j = 0;j<chessArray[0].length;j++){
                if(chessArray[i][j] != 0){
                    count++;
                    sparseArray[count][0] = i;
                    sparseArray[count][1] = j;
                    sparseArray[count][2] = chessArray[i][j];
                }
            }
        }

        System.out.println("得到的稀疏数组为:");

        for(int i = 0;i<sparseArray.length;i++){
            System.out.printf("%d\t%d\t%d\t\n",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);
        }

        //将稀疏数组写入到桌面文件中  C:\Users\XXX\Desktop\data.txt   路径自定义
        File file = new File("C:\\Users\\XXX\\Desktop\\data.txt");
        try {
            FileOutputStream out = new FileOutputStream(file);
            OutputStreamWriter writer = new OutputStreamWriter(out,"UTF-8");

            for(int i = 0;i<sparseArray.length;i++){
                if(i == sparseArray.length-1){
                    writer.write(sparseArray[i][0]+","+sparseArray[i][1]+","+sparseArray[i][2]);
                }else{
                    writer.write(sparseArray[i][0]+","+sparseArray[i][1]+","+sparseArray[i][2]+",");
                }
            }

            //关闭流释放资源
            writer.close();
            out.close();

            //读取硬盘上的数据
            FileInputStream input = new FileInputStream(file);
            InputStreamReader reader = new InputStreamReader(input,"UTF-8");
            StringBuffer buffer = new StringBuffer();
            while (reader.ready()){
                buffer.append((char) reader.read());
            }

            String str = buffer.toString();
            System.out.println("写入硬盘的数据为: "+str);
            String sb1[] = str.split(",");
            //新建一个空的稀疏数组
            int sparseArray2[][] = new int[sb1.length/3][3];
            //给稀疏数组赋值
            int count1 = 0;
            for(int i = 0;i<sparseArray2.length;i++){
                sparseArray2[i][0] = Integer.parseInt(sb1[count1]);
                sparseArray2[i][1] = Integer.parseInt(sb1[count1+1]);
                sparseArray2[i][2] = Integer.parseInt(sb1[count1+2]);
                count1+=3;
            }

            reader.close();
            input.close();

            System.out.println("读取到的硬盘中的稀疏数组为:");
            for(int[] row : sparseArray2){
                for(int temp : row){
                    System.out.printf("%d\t",temp);
                }
                System.out.println("");
            }
            
            //将稀疏数组恢复成二维数组
            int chessArray2[][] = new int[sparseArray2[0][0]][sparseArray2[0][1]];
            for(int i = 1;i<sparseArray2.length;i++){
                chessArray2[sparseArray2[i][0]][sparseArray2[i][1]] = sparseArray2[i][2];
            }

            System.out.println("恢复后的二维数组为: ");

            for(int[] row : chessArray2){
                for(int temp : row){
                    System.out.printf("%d\t",temp);
                }
                System.out.println("");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

控制台展示结果:

原自定义二维数组:
0	0	0	0	0	0	0	0	0	0	0	0	
0	1	0	0	0	0	0	0	0	0	0	0	
0	0	2	0	0	0	0	0	0	0	0	0	
0	0	0	3	0	0	0	0	0	0	0	0	
0	0	0	0	4	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	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	0	0	0	0	0	0	0	0	0	
数组中有效元素的个数为:4
得到的稀疏数组为:
11	12	4	
1	1	1	
2	2	2	
3	3	3	
4	4	4	
写入硬盘的数据为: 11,12,4,1,1,1,2,2,2,3,3,3,4,4,4
读取到的硬盘中的稀疏数组为:
11	12	4	
1	1	1	
2	2	2	
3	3	3	
4	4	4	
恢复后的二维数组为: 
0	0	0	0	0	0	0	0	0	0	0	0	
0	1	0	0	0	0	0	0	0	0	0	0	
0	0	2	0	0	0	0	0	0	0	0	0	
0	0	0	3	0	0	0	0	0	0	0	0	
0	0	0	0	4	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	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	0	0	0	0	0	0	0	0	0	

重点在于知道稀疏数组的行和列代表的含义。

这篇关于JAVA稀疏数组-二维数组的压缩以及写入与读取的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!