java将二维数组转为稀疏数组保存到本地并读取本地文件转为二维数组

简介: java将二维数组转为稀疏数组保存到本地并读取本地文件转为二维数组

package sparsearray;

import java.io.*;

public class SparseArray {

public static void main(String[] args) {
    //创建一个原始的二维数组11*11
    //0表示没有棋子,1表示黑棋,2表示白棋
    int[][] chessArr1 = new int[11][11];
    chessArr1[1][2] = 1;
    chessArr1[2][3] = 2;
    System.out.println("原始二维数组:");
    //遍历二维数组
    for (int[] row : chessArr1) {
        for (int data : row) {
            System.out.printf("%d\t",data);
        }
        System.out.println();
    }
    //统计原始二维数组不为0的的个数
    int count = 0;
    for (int[] row : chessArr1) {
        for (int data : row) {
            if(data != 0) {
                count++;
            }
        }
    }
    System.out.println("原始二维数组不为0的的个数为:"+count);

    //定义稀疏数组
    int[][] sparseArr = new int[count+1][3];

    //稀疏数组第一行的值
    sparseArr[0][0] = chessArr1.length;
    sparseArr[0][1] = chessArr1[0].length;
    sparseArr[0][2] = count;


    //为稀疏数组其他行赋值
    int count2 = 0;//记录是第几个非零的数据
    for (int i = 1;i<chessArr1.length;i++) {
        for (int j = 0;j<chessArr1[0].length;j++) {
            if (chessArr1[i][j]!=0) {
                count2++;
                sparseArr[count2][0] = i;
                sparseArr[count2][1] = j;
                sparseArr[count2][2] = chessArr1[i][j];
            }
        }
    }

    System.out.println("");
    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]);
    }

    System.out.println("开始写入文件<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
    //将稀疏数组保存到磁盘E:\java\repos\idea_repos\DataStructures\src\sparsearray\data.txt,文件名为data.txt
    BufferedWriter out =null;
    try {
        out = new BufferedWriter(new FileWriter("E:\\java\\repos\\idea_repos\\DataStructures\\src\\sparsearray\\map.data",true));  //文件写入流
        //将数组中的元素写入文件,每个用tab隔开
        for(int i = 0;i<sparseArr.length;i++) {
            for (int j=0;j<sparseArr[0].length;j++) {
                out.write(sparseArr[i][j]+"\t");
            }
            out.newLine();

// out.write("\r\n");

        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (out!=null) {
            try {
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    System.out.println("写入文件成功<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
    /**
     * 读取map.data文件
     */
    BufferedReader br = null;
    int readRow = 0;//记录行数

// String[] temp =null;//读取的数组

    //建新的稀疏数组
    int[][] sparseArr2 = new int[count+1][3];
    try {
        br = new BufferedReader(new FileReader("E:\\java\\repos\\idea_repos\\DataStructures\\src\\sparsearray\\map.data"));
        String line = null;
        //统计行数
        while ((line = br.readLine()) !=null) {
            String[] temp = line.split("\t");
            for (int j = 0;j<temp.length;j++) {
                sparseArr2[readRow][j] = Integer.parseInt(temp[j]);
            }
            readRow++;
        }



    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br!=null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    /**
     * 遍历读取的稀疏数组
     */
    System.out.println("从磁盘读取的稀疏数组为:");
    for (int i = 0;i<sparseArr2.length;i++) {
        System.out.printf("%d\t%d\t%d\t\n",sparseArr2[i][0],sparseArr2[i][1],sparseArr2[i][2]);
    }

    /**
     * 将稀疏数组转为二维数组
     */
    //根据稀疏数组创建二维数组
    int[][] chessArr2 = new int[sparseArr2[0][0]][sparseArr2[0][1]];

    //为二维数组赋值
    for(int i = 1; i < sparseArr2.length; i++) {
        chessArr2[sparseArr2[i][0]][sparseArr2[i][1]] = sparseArr2[i][2];
    }
    System.out.println();
    System.out.println("转换后的新的二维数组为:");
    //输出新的二维数组
    for (int[] row : chessArr2) {
        for (int data : row) {
            System.out.printf("%d\t",data);
        }
        System.out.println();
    }
}

}

目录
相关文章
|
21天前
|
Java
|
16天前
|
Java
Java数组的应用场景
Java数组的应用场景
28 1
|
16天前
|
存储 机器学习/深度学习 Java
Java数组
Java数组
23 1
|
13天前
|
存储 开发者 C#
WPF与邮件发送:教你如何在Windows Presentation Foundation应用中无缝集成电子邮件功能——从界面设计到代码实现,全面解析邮件发送的每一个细节密武器!
【8月更文挑战第31天】本文探讨了如何在Windows Presentation Foundation(WPF)应用中集成电子邮件发送功能,详细介绍了从创建WPF项目到设计用户界面的全过程,并通过具体示例代码展示了如何使用`System.Net.Mail`命名空间中的`SmtpClient`和`MailMessage`类来实现邮件发送逻辑。文章还强调了安全性和错误处理的重要性,提供了实用的异常捕获代码片段,旨在帮助WPF开发者更好地掌握邮件发送技术,提升应用程序的功能性与用户体验。
19 0
|
20天前
|
存储 Java 开发者
揭秘!HashMap底层结构大起底:从数组到链表,再到红黑树,Java性能优化的秘密武器!
【8月更文挑战第24天】HashMap是Java集合框架中的核心组件,以其高效的键值对存储和快速访问能力广受开发者欢迎。在JDK 1.8及以后版本中,HashMap采用了数组+链表+红黑树的混合结构,实现了高性能的同时解决了哈希冲突问题。数组作为基石确保了快速定位;链表则用于处理哈希冲突;而当链表长度达到一定阈值时,通过转换为红黑树进一步提升性能。此外,HashMap还具备动态扩容机制,当负载因子超过预设值时自动扩大容量并重新哈希,确保整体性能。通过对HashMap底层结构的深入了解,我们可以更好地利用其优势解决实际开发中的问题。
41 0
|
21天前
|
存储 搜索推荐 算法
在 Java 中如何更改数组列表的顺序
【8月更文挑战第23天】
13 0
|
21天前
|
存储 安全 Java
在 Java 中如何存储数组列表
【8月更文挑战第23天】
21 0
Java里的稀疏矩阵Sparse Array
Java里的稀疏矩阵Sparse Array
Java里的稀疏矩阵Sparse Array
|
10天前
|
监控 Java 调度
【Java学习】多线程&JUC万字超详解
本文详细介绍了多线程的概念和三种实现方式,还有一些常见的成员方法,CPU的调动方式,多线程的生命周期,还有线程安全问题,锁和死锁的概念,以及等待唤醒机制,阻塞队列,多线程的六种状态,线程池等
69 6
【Java学习】多线程&JUC万字超详解
|
3天前
|
Java 调度 开发者
Java并发编程:深入理解线程池
在Java的世界中,线程池是提升应用性能、实现高效并发处理的关键工具。本文将深入浅出地介绍线程池的核心概念、工作原理以及如何在实际应用中有效利用线程池来优化资源管理和任务调度。通过本文的学习,读者能够掌握线程池的基本使用技巧,并理解其背后的设计哲学。