该方法模拟的是将棋盘的位置保存到稀疏数组中,降低存储的数据量,通过写入磁盘做持久化,再读入后恢复棋盘内容。

package com.moson.sparsearray;import java.io.*;/*** 数组转稀疏数组再转回数组* @author moxingjian* @version 1.0* @date 10/10/19 7:40 PM*/
public class SparseArray {public static void main(String[] args) {// 初始化数组int[][] cheerArray = new int[11][11];// 添加值,添加的是棋盘的位置cheerArray[1][2] = 1;cheerArray[2][3] = 2;cheerArray[3][6] = 1;cheerArray[4][4] = 2;System.out.println("原始数组~");for (int[] row : cheerArray) {for (int data : row) {System.out.printf("%d\t" , data);}System.out.println();}// 获取非0的个数int sum = 0;for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (cheerArray[i][j] != 0) {sum++;}}}// 初始化稀疏数组int[][] sparseArray = new int[sum+1][3];// 第一行记录的是:行、列数和非0的个数sparseArray[0][0] = 11;sparseArray[0][1] = 11;sparseArray[0][2] = sum;// 记录非0的行数int count = 0;// 填充稀疏矩阵剩下的行for (int i = 0; i < 11; i++) {for (int j = 0; j < 11; j++) {if (cheerArray[i][j] != 0) {count++;sparseArray[count][0] = i;sparseArray[count][1] = j;sparseArray[count][2] = cheerArray[i][j];}}}System.out.println("得到稀疏数组~");// 输出稀疏数组/*  for (int[] row : sparseArray) {for (int data : row) {System.out.printf("%d\t", data);}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]);}String pathname = "/Users/moxingjian/IdeaProjects/DataStructures/src/main/java/com/moson/sparsearray/saprseArray.txt";// 输出到文件中File file = new File(pathname);FileOutputStream fileOutputStream = null;if (!file.exists()) {try {//创建文件file.createNewFile();} catch (IOException e) {e.printStackTrace();}}try {fileOutputStream = new FileOutputStream(file, true);for (int i = 0; i < sparseArray.length; i++) {StringBuffer stringBuffer = new StringBuffer();stringBuffer.append( sparseArray[i][0] + "\t" +  sparseArray[i][1] + "\t" + sparseArray[i][2] + "\n");System.out.println(stringBuffer);fileOutputStream.write(stringBuffer.toString().getBytes("utf-8"));}} catch (FileNotFoundException e) {e.printStackTrace();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}System.out.println("从文件中读取稀疏数组~");// 从文件中读取稀疏数组File sparseArrayData = new File(pathname);int[][] sourceCheerArray = null;if (file.exists()) {FileReader fileReader = null;BufferedReader bufferedReader = null;try {fileReader = new FileReader(sparseArrayData);bufferedReader = new BufferedReader(fileReader);String line = null;int countSparse = 0;int number = 0;while ((line = bufferedReader.readLine()) != null) {System.out.println(line);// 将每一行转为数组String[] split = line.split("\t");Integer row = Integer.valueOf(split[0]);Integer col = Integer.valueOf(split[1]);Integer value = Integer.valueOf(split[2]);if (countSparse == 0) {sourceCheerArray = new int[row][col];} else {number++;sourceCheerArray[row][col] =  value;}countSparse++;}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {try {bufferedReader.close();fileReader.close();} catch (IOException e) {e.printStackTrace();}}}// 将稀疏数组转回二维数组/*  int[][] sourceCheerArray = new int[sparseArray[0][0]][sparseArray[0][1]];// 将稀疏数组中记录的值填充回二维数组for (int i = 1; i < sparseArray.length; i++) {sourceCheerArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];}*/System.out.println("得到原始二维数组~");// 输出源二维数组for (int[] row : sourceCheerArray) {for (int data : row) {System.out.printf("%d\t", data);}System.out.println();}}
}

二维数组转稀疏数组,写入文件后再读取文件,将内容转回二维数组相关推荐

  1. python生成100个随机数、写入文件后再读取显示内容_Python3 实现随机生成一组不重复数并按行写入文件...

    笔主在做一个项目要生成一组随机有序的整型数字,并按行输出到文本文件使用,恰好开始学习Python3,遂决定直接使用Python3解决 思路:与随机数相关的函数都要使用到random这个系统库,查看相关 ...

  2. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中,谭浩强《c语言程序设计》第六章第四题

    题目 本题是谭浩强<c语言程序设计>第六章第四题 题目:有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中. 以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同 ...

  3. C语言,有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中

    C语言,有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中 代码: #include <stdio.h> int main() {int a[11]={1,2,3,4, ...

  4. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中——C语言

    1 概述 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中. 2 解法 //C程序设计第五版(谭浩强) //章节:第六章 利用数组处理批量数据 //题号:6.4 //题目:有一个 ...

  5. 有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中

    有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中(C语言) 题目要求:如标题 思路: 如果一个数列由小到大排列,则对数列进行反向遍历.当遇到输入的数x大于a[i]时,就跳出循环 ...

  6. 【C】有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中

    //有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中 #include <stdio.h> int main(){int a[10]={14,23,45,67,84, ...

  7. C语言-数组和指针-11(已有一个排号序的数组,要求输入一个数后,按原来的排序规律将它插入数组中)

    题目: 已有一个排号序的数组,要求输入一个数后,按原来的排序规律将它插入数组中 源代码: #include <stdio.h> #define ROW 7 int main(){int a ...

  8. HTML5 文件域+FileReader 读取文件并上传到服务器(三)

    一.读取文件为blob并上传到服务器 HTML <div class="container"><!--读取要上传的文件--><input type=& ...

  9. php 读取一行文件内容,PHP文件处理—如何读取文件(一行,整个文件)

    PHP文件处理-如何读取文件(一行,整个文件) 相对打开和关闭文件来说,读写文件更复杂一些.这里主要从读取数据和写入数据两方面进行讲解. 那么在上一篇文章<PHP文件处理-打开和关闭文件> ...

最新文章

  1. Hyperface笔记
  2. Kdevelop的安装-2种方法
  3. Crawler:基于requests库+urllib3库+伪装浏览器实现爬取抖音账号的信息数据
  4. 计算机usb共享网络泄密,杜绝USB泄密 MyUSBOnly
  5. php的实体字符表,php htmlspecialchars_decode() 函数把预定义的 HTML 实体转换为字符
  6. oracle过程包保存乱码_这些火遍网络的哆啦A梦表情包,你知道出处吗?
  7. TiDB集群大规模删除实践
  8. Entity Framework 实践系列 —— 搞好关系 - 单相思(单向一对一,one-to-one)
  9. 可视化数据图表制作注意事项
  10. 1.Spring实现数据库的读写分离
  11. 7个开源好用的管理系统,建议收藏加转载
  12. python+opencv读取文件夹图片并保存
  13. 禅道数据库管理登录失败,使用/opt/zbox/auth/adduser.sh命令新开用户解决
  14. html的nofollow、noindex标签
  15. Java的LockSupport.park()实现分析(转载)
  16. linux指令_周东海
  17. word公式编号及交叉引用技巧
  18. 推荐系统深度学习实战之Wide_Deep
  19. 《魔道祖师》第三季预告片首发为汪叽庆生
  20. 传感器——ATGM332D 北斗定位模块

热门文章

  1. 隐私计算--代理重加密
  2. github:已经提交并push后再次追加提交
  3. UltraEdit-64中文安装
  4. python:将一个文件转换为二进制文件(binary)
  5. 2021-07-24
  6. 等待链表_调度(准备运行)链表
  7. 怎样反制红队“硬件“攻击
  8. 【网络安全】黑客是怎么利用私服游戏远控电脑的呢?
  9. Windows事件等待学习笔记(四)—— 事件信号量互斥体
  10. 012 背包二叉树遍历分析和代码编写