浅谈Java数据结构之稀疏数组知识总结
稀疏数组
- 当一个数组中的元素大多为0或者相同元素的时候,可以用稀疏数组来压缩
- 稀疏数组只记录 行row 列col 值value
![浅谈Java数据结构之稀疏数组知识总结](https://img.it610.com/image/info11/7f428be3bf864bdd9bf7ddff9ea5552b.jpg)
文章图片
![浅谈Java数据结构之稀疏数组知识总结](https://img.it610.com/image/info11/6ad052ca2fdf4c0a9913bc646a88bbcb.jpg)
文章图片
1.实现二维数组转为稀疏数组的步骤:
- 遍历数组,得到数组中 不为0的个数,并记录为sum,作为稀疏数组第0行的 value
- 遍历数组,将数组中不为0的数的行和列和值分别写入稀疏数组的 row col val 中
public class SparseArray {public static void main(String[] args) {// 创建一个原始二维数组// 0表示没有棋子,1,2各表示一种棋int chessArr[][] = new int[8][8]; chessArr[1][1] = 1; chessArr[2][2] = 2; // 遍历原始数组,获得不等于 0 的个数,并输出原始数组int sum = 0; System.out.println("原始数组:"); for (int[] ints : chessArr) {for (int anInt : ints) {System.out.print(anInt+"\t"); if (anInt != 0){sum++; }}System.out.println(); }System.out.println(sum); // 创建稀疏数组并赋值int sparseArray[][] = new int[sum+1][3]; int row = chessArr.length; // 原数组的行数int col = chessArr[0].length; // 原数组的列数sparseArray[0][0] = row; sparseArray[0][1] = col; sparseArray[0][2] = sum; // 遍历原始数组并赋值给稀疏数组int count = 0; // count 为计数器for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (chessArr[i][j] != 0) {count++; sparseArray[count][0] = i; sparseArray[count][1] = j; sparseArray[count][2] = chessArr[i][j]; }}}// 输出得到的稀疏数组System.out.println("稀疏数组为:"); for (int i = 0 ; i < sparseArray.length; i++) {System.out.println(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]); }}}
2.实现二维数组转稀疏数组的步骤
- 根据稀疏数组的第一行创建新的二维数组
- 遍历稀疏数组,将row col val 赋给新的二维数组
public class SparseArray {public static void main(String[] args) {...... // 接上一段代码// 输出得到的稀疏数组System.out.println("稀疏数组为:"); for (int i = 0 ; i < sparseArray.length; i++) {System.out.println(sparseArray[i][0]+"\t"+sparseArray[i][1]+"\t"+sparseArray[i][2]); }// 创建新的二维数组int newChessArray[][] = new int[sparseArray[0][0]][sparseArray[0][1]]; for (int i = 1 ; i < sparseArray.length; i++) {newChessArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2]; }// 输出新的二维数组System.out.println("恢复后的二维数组是:"); for (int[] ints : newChessArray) {for (int anInt : ints) {System.out.print(anInt+"\t"); }System.out.println(); }}}
3.将稀疏数组写入磁盘
public static void main(String[] args) {........ // 将稀疏数组存入磁盘FileOutputStream fw = null; try {fw = new FileOutputStream("sparseArray.txt"); // 遍历写入磁盘for (int i = 0; i < sparseArray.length; i++) {for (int j = 0; j < 3; j++) {fw.write(sparseArray[i][j]); }}fw.flush(); } catch (FileNotFoundException e) {e.printStackTrace(); } catch (IOException e) {e.printStackTrace(); } finally {if (fw != null){fw.close(); }}}
4.从磁盘读取稀疏数组
public static void main(String[] args) {.......// 从磁盘读取稀疏数组FileInputStream fi = null; int newSparseArray[][] = new int[sum+1][3]; // sum 指前面二维数组有值的个数try {fi = new FileInputStream("sparseArray.txt"); for (int i = 0; i < newSparseArray.length; i++) {for (int j = 0; j < 3; j++){newSparseArray[i][j] = fi.read(); }}} catch (FileNotFoundException e){e.printStackTrace(); } finally {if (fi != null){fi.close(); }}}
到此这篇关于浅谈Java数据结构之稀疏数组知识总结的文章就介绍到这了,更多相关Java稀疏数组内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- Java|Java基础——数组
- RxJava|RxJava 在Android项目中的使用(一)
- java之static、static|java之static、static final、final的区别与应用
- Java基础-高级特性-枚举实现状态机