原数组转稀疏数组,稀疏数组转原数组,稀疏数组写入磁盘,从磁盘恢复原数组

2023-10-27

代码实现

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;

public class SparseArray {
    public static void main(String[] args) {
        //初始化原数组
        int[][] array = new int[11][11];
        array[1][2] = 1;
        array[2][4] = 2;

        System.out.println("****************************原数组****************************");
        traverse(array);

        System.out.println("****************************原数组转稀疏数组****************************");
        int[][] sparseArray = oldTosparse(array);
        //遍历稀疏数组
        traverse(sparseArray);

        System.out.println("****************************稀疏数组转原数组****************************");
        int[][] oldArray = sparseToold(sparseArray);
        //遍历稀疏数组
        traverse(oldArray);

        System.out.println("****************************将稀疏数组写入到磁盘中****************************");
//        try {
//            boolean flag = sparseArrayToio(sparseArray);
//            if (flag){
//                System.out.println("写入成功");
//            }
//        }catch (Exception e){
//            e.printStackTrace();
//        }

        //上述写入步骤成功后,在做读取时需把写入的注释掉,避免重复写入
        System.out.println("****************************从磁盘中恢复原数组****************************");
        try {
            sparseArrayFromIo(); 
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    //将稀疏数组写入到磁盘中
    public static boolean sparseArrayToio(int[][] sparseArray) throws Exception{
        boolean flag = false;
        File file = new File("test/File/sparseArray.txt");
        if (!file.exists()){
            file.createNewFile();
        }
        FileWriter fileWriter = new FileWriter(file);
        for (int i=0;i< sparseArray.length;i++){
            for (int j=0;j< sparseArray[i].length;j++){
                if(j!= sparseArray[i].length-1){
                    fileWriter.write(sparseArray[i][j]+"\t");
                }else{
                    fileWriter.write(sparseArray[i][j]+"");
                }
            }
            fileWriter.write("\n");
        }
        fileWriter.flush();
        fileWriter.close();
        flag = true;
        return flag;
    }

    //从磁盘中恢复数组
    public static void sparseArrayFromIo( ) throws Exception {
        FileReader reader = new FileReader("test/File/sparseArray.txt");
        BufferedReader bf = new BufferedReader(reader);
        ArrayList<String> arrayList = new ArrayList<>();
        String str;
        // 按行读取字符串
        while ((str = bf.readLine()) != null) {
            arrayList.add(str);
        }
        if (arrayList.size() == 0){
            System.out.println("文件为空");
            return;
        }
        int[][] sparseArray = new int[arrayList.size()][3];
        for(int i = 0;i < sparseArray.length;i++) {
            for (int j = 0; j < sparseArray[i].length; j++) {
                sparseArray[i][j] = Integer.parseInt(arrayList.get(i).split("\t")[j]);
            }
        }
        arrayList.clear();
        int[][] oldArray = new int[sparseArray[0][0]][sparseArray[0][1]];
        //将有效数填回原数组,
        for (int i=1;i<=sparseArray[0][2];i++){
            oldArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
        }
        //遍历稀疏数组
        traverse(oldArray);
    }
    //遍历二维数组
    public static void traverse(int[][] array){
        for (int[] row : array) {
            for (int item : row) {
                System.out.printf("%d\t",item);
            }
            System.out.println();
        }
    }
    //将稀疏数组转为原数组
    public static int[][] sparseToold(int[][] sparseArray){
        int[][] oldArray = new int[sparseArray[0][0]][sparseArray[0][1]];
        //将有效数填回原数组
        for (int i=1;i<=sparseArray[0][2];i++){
            oldArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];
        }
        return oldArray;
    }
    //原数组转稀疏数组
    public static int[][] oldTosparse(int[][] oldArray){
        int sum = 0;
        for (int i=0;i<oldArray.length;i++){
            for (int j=0;j<oldArray[i].length;j++){
                if(oldArray[i][j] != 0){
                    sum++;
                }
            }
        }
        //创建稀疏数组
        int[][] sparseArray = new int[sum+1][3];//稀疏数组始终为3列,行数为有效数+1
        //稀疏数组的第一行始终是原数组的行数、列数、有效值数
        sparseArray[0][0] = oldArray.length;
        sparseArray[0][1] = oldArray[0].length;
        sparseArray[0][2] = sum;
        //将有效数放入稀疏数组中
        //count:表示第几个有效数
        int count = 0;
        for (int i=0;i<oldArray.length;i++){
            for (int j=0;j<oldArray[i].length;j++){
                if(oldArray[i][j] != 0){
                    count++;
                    sparseArray[count][0] = i;
                    sparseArray[count][1] = j;
                    sparseArray[count][2] = oldArray[i][j];
                }
            }
        }
        return sparseArray;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

原数组转稀疏数组,稀疏数组转原数组,稀疏数组写入磁盘,从磁盘恢复原数组 的相关文章

  • 如何使用 Java 和 Selenium WebDriver 在 C 目录中创建文件夹并需要将屏幕截图保存在该目录中?

    目前正在与硒网络驱动程序和代码Java 我有一种情况 我需要在 C 目录中创建一个文件夹 并在该文件夹中创建我通过 selenium Web 驱动程序代码拍摄的屏幕截图 它需要存储在带有时间戳的文件夹中 如果我每天按计划运行脚本 所有屏幕截
  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Java EE:如何获取我的应用程序的 URL?

    在 Java EE 中 如何动态检索应用程序的完整 URL 例如 如果 URL 是 localhost 8080 myapplication 我想要一个可以简单地将其作为字符串或其他形式返回给我的方法 我正在运行 GlassFish 作为应
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 如何找到给定字符串的最长重复子串

    我是java新手 我被分配寻找字符串的最长子字符串 我在网上研究 似乎解决这个问题的好方法是实现后缀树 请告诉我如何做到这一点或者您是否有任何其他解决方案 请记住 这应该是在 Java 知识水平较低的情况下完成的 提前致谢 附 测试仪字符串
  • 无法展开 RemoteViews - 错误通知

    最近 我收到越来越多的用户收到 RemoteServiceException 错误的报告 我每次给出的堆栈跟踪如下 android app RemoteServiceException Bad notification posted fro
  • 控制Android的前置LED灯

    我试图在用户按下某个按钮时在前面的 LED 上实现 1 秒红色闪烁 但我很难找到有关如何访问和使用前置 LED 的文档 教程甚至代码示例 我的意思是位于 自拍 相机和触摸屏附近的 LED 我已经看到了使用手电筒和相机类 已弃用 的示例 但我
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • Spring @RequestMapping 带有可选参数

    我的控制器在请求映射中存在可选参数的问题 请查看下面的控制器 GetMapping produces MediaType APPLICATION JSON VALUE public ResponseEntity
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 如何将 pfx 文件转换为 jks,然后通过使用 wsdl 生成的类来使用它来签署传出的肥皂请求

    我正在寻找一个代码示例 该示例演示如何使用 PFX 证书通过 SSL 访问安全 Web 服务 我有证书及其密码 我首先使用下面提到的命令创建一个 KeyStore 实例 keytool importkeystore destkeystore
  • 在 Mac 上正确运行基于 SWT 的跨平台 jar

    我一直致力于一个基于 SWT 的项目 该项目旨在部署为 Java Web Start 从而可以在多个平台上使用 到目前为止 我已经成功解决了由于 SWT 依赖的系统特定库而出现的导出问题 请参阅相关thread https stackove
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 无法捆绑适用于 Mac 的 Java 应用程序 1.8

    我正在尝试将我的 Java 应用程序导出到 Mac 该应用程序基于编译器合规级别 1 7 我尝试了不同的方法来捆绑应用程序 1 日食 我可以用来在 Eclipse 上导出的最新 JVM 版本是 1 6 2 马文 看来Maven上也存在同样的
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • Firebase 添加新节点

    如何将这些节点放入用户节点中 并创建另一个节点来存储帖子 我的数据库参考 databaseReference child user getUid setValue userInformations 您需要使用以下代码 databaseRef

随机推荐

  • Android Intents和Intent过滤器

    点击打开链接 intent组成 组件名 action动作 data数据 category分类 extras附加信息 flag标记 Intent负责对应用中一次操作的动作 动作涉及数据 附加数据进行描述 Android则根据此Intent的描
  • html2canvas的ignoreElements的使用方法

    我的处女作 Canvas系列教程 在我的Github上正在连载更新 希望能得到您的关注和支持 让我有更多的动力进行创作 教程介绍 教程目录等能在README里查阅 传送门 https github com 827652549 CanvasS
  • unity背景设置透明,qnx层 透传安卓显示

    相机设置为solid color 背景颜色设置为黑色透明度为0 一定设置成黑色 设置成其他颜色打包出来和ios背景融合出很奇怪的颜色 player setting 的render over native ui 勾选 上
  • 事件推送网关:让cmdb告别“花瓶”

    前言 众所周知cmdb在运维过程中的重要性 但是我们不希望它是一个 花瓶 因此 运维思索 cmdb打通zabbix jumpserver探索 成了我们当前面临的一个课题 而我们可以借助cmdb的事件推送来解决此问题 因此引入了事件推送网关
  • 成功解决Python导入opencv报错“DLL load failed while importing cv2: 找不到指定的模”

    场景描述 本人使用腾讯云服务器做图像处理的项目 导入opencv时报错 报错内容 DLL load failed while importing cv2 找不到指定的模 前提 已经安装opencv 个人认为安装教程比较好的博客是这一篇ope
  • npm link详解

    前言 npm install 可以把发布在 npmjs 平台上的模块包下载到本地 npm install g 可以把包下下来的同时 还帮我们配置好全局变量 让我们可以直接使用命令而不是通过 node 来执行或者配置 package json
  • 大气传输、大气辐射传输

    大气传输 大气传输理论是指研究红外辐射和大气相互作用的理论 包括吸收 散射 折射和湍流的影响情况 大气特性 压力 温度 密度及各种成分的含量 随时间 地点以一种极为复杂的方式变化 因此辐射在大气中传输受到的影响也是相当复杂的 定义大气传输理
  • IntelliJ IDEA远程调试:使用IDEA Remote Debug进行高效调试的指南

    引言 在开发分布式系统时 调试是一个重要但复杂的环节 开发者通常需要跨越多个服务 模块和线程来追踪和解决问题 在没有远程调试的情况下 许多开发者会在代码中添加各种日志语句 然后重新部署和上线来调试 这种方法不仅费时 而且可能引入额外的错误或
  • 计算机网络笔记第四章传输层

    四 传输层 1 传输层服务 1 服务和协议 服务和协议的目的是让不同主机之间应用进程之间的逻辑通信 传输协议 TCP UDP 运行于终端系统 可能使用多个协议 发送端 应用层报文划分成分段 分解 向下交互给网络层 接收端 重组成报文 向上交
  • [苹果开发者账号]08 苹果App Store定价机制升级引起的问题

    目录 1 问题 2 排查 3 原因 1 问题 周一的时候 突然运营部门的同事 通过工单向开发部门反应 苹果手机用户使用我们的app产品付款时 有多付款的现象 1098元却付款成了1198元 额外多付款了100元 2 排查 app产品因为是虚
  • Git操作

    目录 Git简介 git使用 流程 核心总结 安装 基础命令 编辑 查看仓库状态 工作区操作 工作区内容提交到暂存区 提交暂存区内容到版本库 git log 和git reflog的区别 git reset hard mix soft的区别
  • 华为OD机试 - 转骰子(Java)

    题目描述 骰子是一个立方体 每个面一个数字 初始为左1 右2 前3 观察者方向 后4 上5 下6 用123456表示这个状态 放置在平面上 可以向左翻转 用L表示向左翻转1次 可以向右翻转 用R表示向右翻转1次 可以向前翻转 用F表示向前翻
  • (2023)ConKI: Contrastive Knowledge Injection for Multimodal Sentiment Analysis

    一 整体部分 话不多说 先上整体框架图 同样的和大多数做法一样 对于文本模态 用Bert提取 音频和视频使用transformer提取特征 这里创新的一点是 通过知识注入适配器Adapter将外部知识注入到每个模态 称为特定知识 再和特征提
  • SQLServer数据库 附加数据库时出错;有关详细信息,请单击“消息”列中的超链接的处理方式

    在SQL Server 数据库中附加数据库时出错 这是由于权限的问题 找到数据库所在文件或文件件 我的数据库文件放到了 新建文件夹 2 中了 所以 我设置下这个文件夹的权限 1 点击右键 选中属性 2 点击安全 编辑 添加 高级 立即查找
  • 将hexo项目部署到github

    个人博客预览点击这里 搭建以及优化hexo项目点击这里 一 在github新建一个仓库 二 安装插件来实现一键部署 三 在项目根目录下的 config yml配置文件末尾做如下修改 四 推送到github仓库 一 在github新建一个仓库
  • linux下jps命令找不到的问题 bash: jps: 未找到命令... --- 记录

    jps是用来查看进程的命令 常常要用jps来查看名称服务是否已启动 但是某些机器报错如下 bash jps command not found 解决办法如下 一 检查基础配置 which Java java version 如果指向的是1
  • MySQL 事务 学习

    MySQL 事务 学习 事务 事务 ACID原则 原子性 一致性 隔离性 持久性 原子性 Atomicity 要么都成功 要么都失败 一致性 Consistency 事务前后的数据完整性要保持一致 隔离性 Isolation 每个事务之间相
  • ThreadLocal 的工作原理

    ThreadLocal 是线程的内部数据的存储类 通过它可以在指定线程中存储数据 数据存储以后只有在指定的线程中才能获取到对应的存储的数据 其他线程无法获取到数据 下面通过一个小块代码来分析一下它的使用 private ThreadLoca
  • C++替换string中的\“为“

    1 背景 有一个项目需要我解析后台服务器返回的XML数据 但是因为后台Http接口返回的数据包是Json XML只是其中的一部分 如下图所示 可见 XML数据中 节点的属性数据都是 这实际上是不符合XML规范的 也就无法正常解析 需要我自己
  • 原数组转稀疏数组,稀疏数组转原数组,稀疏数组写入磁盘,从磁盘恢复原数组

    代码实现 import java io BufferedReader import java io File import java io FileReader import java io FileWriter import java u