欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java数据结构与算法(将稀疏数组保存到硬盘并恢复)

程序员文章站 2022-07-10 18:53:30
package src;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class SparseArray02 {public static void main(String[] args) { // 稀疏数组代码实现 // 一、创建原始二维数组 int[][] begin =...

Java数据结构与算法(将稀疏数组保存到硬盘并恢复)

 // 稀疏数组代码实现
    // 一、创建原始二维数组
    int[][] begin = new int[11][11];
    // 向原始数组中添加元素
    begin[2][3] = 16;
    begin[3][4] = 18;
    begin[6][6] = 168;
    // 遍历原始数组
    // 统计有效元素个数
    int sum = 0;
    System.out.println("原始数组为:");
    for (int[] ints : begin){
        for (int ele : ints){
            System.out.print(ele + " ");
            if (ele != 0) sum++;
        }
        System.out.println();
    }

    // 二、将原始数组转换为稀疏数组
    // 创建稀疏数组
    int[][] sparseArray = new int[sum+1][3];
    // 为稀疏数组第一行添加数据
    sparseArray[0][0] = 11;
    sparseArray[0][1] = 11;
    sparseArray[0][2] = sum;
    // 为稀疏数组添加数据(从第二行开始)
    // count代表稀疏数组行号
    int count = 1;
    // 遍历原始数组,将有效元素的行数、列数、值添加进稀疏数组中
    // i代表原始数组行号,k代表原始数组列号
    for (int i = 0; i < 11; i++){
        for (int k = 0; k < 11; k++){
            if (begin[i][k] != 0){
                sparseArray[count][0] = i;
                sparseArray[count][1] = k;
                sparseArray[count][2] = begin[i][k];
                count++;
            }
        }
    }
    // 遍历稀疏数组
    System.out.println("稀疏数组为:");
    for (int i = 0; i < sparseArray.length; i++){
        System.out.println(sparseArray[i][0] + " " + sparseArray[i][1] + " " + sparseArray[i][2]);
    }

    // 三、将稀疏数组保存进硬盘
    System.out.println("将稀疏数组保存到硬盘");
    // 创建一个输出流
    FileWriter writer = null;
    try {
        writer = new FileWriter("F:\\数据结构和算法\\IDEA代码\\稀疏数组\\map.data");
        // 将稀疏数组写进IO流中,一边遍历一遍写
        for (int i = 0; i < sparseArray.length; i++){
            writer.write(sparseArray[i][0] + " " + sparseArray[i][1] + " " + sparseArray[i][2] + " ");
        }
        writer.flush();
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (writer != null) {
        try {
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    System.out.println("保存成功");

    // 四、从硬盘中读取稀疏数组
    System.out.println("从硬盘中读取稀疏数组");
    // 创建一个输入流
    FileReader reader = null;
    // 定义一个字符串缓冲对象用来接收读取到的字符
    StringBuffer sb = null;
    try {
        reader = new FileReader("F:\\数据结构和算法\\IDEA代码\\稀疏数组\\map.data");
        sb = new StringBuffer();
        // 通过Reader类的read()方法读取单个字符,并将其转换成char类型
        while(reader.ready()){
            sb.append((char) reader.read());
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (reader != null) {
        try {
            reader.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    System.out.println("读取成功");
    // 将读取到的字符转换成字符串
    String s = sb.toString();
    System.out.println(s);
    // 将字符串切割成String数组
    String[] strings = s.split(" ");

    // 转换为稀疏数组
    int[][] sparseArray2 = new int[strings.length/3][3];
    // 为恢复后稀疏数组的第一行赋值
    // 将String转换成int,使用Integer.parseInt()方法
    sparseArray2[0][0] = Integer.parseInt(strings[0]);
    sparseArray2[0][1] = Integer.parseInt(strings[1]);
    sparseArray2[0][2] = Integer.parseInt(strings[2]);
    // 为恢复后稀疏数组其它行赋值(从第二行开始)
    int line = 1;
    // 此处i为strings数组中元素下标
    for (int i = 3; i < strings.length; i+=3){
        sparseArray2[line][0] = Integer.parseInt(strings[i]);
        sparseArray2[line][1] = Integer.parseInt(strings[i + 1]);
        sparseArray2[line][2] = Integer.parseInt(strings[i + 2]);
        line++;
    }

    System.out.println("还原后的稀疏数组为:");
    for (int i = 0; i < sparseArray2.length; i++){
        System.out.println(sparseArray2[i][0] + " " + sparseArray2[i][1] + " " + sparseArray2[i][2]);
    }

    // 五、稀疏数组还原为原始数组
    int[][] overArray = new int[sparseArray2[0][0]][sparseArray2[0][1]];
    for (int i = 1; i < sparseArray2.length; i++){
        overArray[sparseArray2[i][0]][sparseArray[i][1]] = sparseArray2[i][2];
    }
    System.out.println("还原后的原始数组为:");
    for (int[] ints : overArray){
        for (int ele : ints){
            System.out.print(ele + " ");
        }
        System.out.println();
    }
} 

}

本文地址:https://blog.csdn.net/weixin_47552225/article/details/108268354