JAVA数据结构-稀疏数组
稀疏数组
什么是稀疏数组?
假设有这样的一个二维数组
shape是11x11,但是很多数据都是0,比较浪费空间,我们可以通过一些方法来压缩这个数组,稀疏数组就是一种压缩数组的方法,通过稀疏数组变换后,原数组变为
变成了4X3,节约了很多空间
稀疏数组存储原理
当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。
稀疏数组处理数据的方法是:
- 记录数组一共有几行几列,有多少个不同的值
- 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模
稀疏数组的实现
1.定义一个SparseArray类
public class SparseArray implements Serializable {private static int[][] array1;public SparseArray(int[][] array1) {this.array1 = array1;}public SparseArray() {}
}
2.向SparseArray类中添加将普通数组变为SparseArray的方法
public void toself(int[][] sou){int row = sou.length;int col = 0;int count = 0;for (int[] so:sou){col = so.length;for (int s:so){if (s!=0){count++;}}}array1 = new int[count+1][3];array1[0][0] = row;array1[0][1] = col;array1[0][2] = count;int target = 1;for (int i = 0; i < row; i++) {for (int j = 0; j < col; j++) {if (sou[i][j]!=0){array1[target][0] = i;array1[target][1] = j;array1[target][2] = sou[i][j];target++;}}}}
3.向SparseArray中添加将稀疏数组变为普通数组的方法
public int[][] toarray(){int[][] result = new int[array1[0][0]][array1[0][1]];for (int[] demp:array1){result[demp[0]][demp[1]] = demp[3];}return result;}
4.为了方便测试,给SparseArray类添加print方法
public void print(){System.out.println(array1[0][0]+"---"+array1[0][1]+"---"+array1[0][2]);System.out.println("---------------------------------------");for (int i = 1; i <= array1[0][2]; i++) {System.out.println(array1[i][0]+"---"+array1[i][1]+"---"+array1[i][2]);}}
补充:将SparseArray类存入磁盘和磁盘中读取
1,存盘
public static void save(SparseArray obj,String path){File file = new File(path);OutputStream out;try {out = new FileOutputStream(file);ObjectOutputStream objectOutputStream = new ObjectOutputStream(out);objectOutputStream.writeObject(obj);objectOutputStream.flush();objectOutputStream.close();out.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
2,读取
public static SparseArray read(String path){File file = new File(path);InputStream in;try {in = new FileInputStream(file);ObjectInputStream objectInputStream = new ObjectInputStream(in);Object o = objectInputStream.readObject();SparseArray res = (SparseArray)o;in.close();return res;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return null;}
JAVA数据结构-稀疏数组相关推荐
- java数据结构之数组
数据结构对我们的程序员也是非常重要的,相当于一个基础学科,从今天开始,咱们再重新学习一下数据结构吧 1,首先我们要定义一下泛型,初始化成员变量,声明构造方法. private T data[];pri ...
- Java数据结构-基于数组的栈和泛型
泛型可以参数化变量的类型 当你需要用不同类型的基本类型变量来调用构造方法时你需要泛型 public class Test {public static void main(String[] args) ...
- Java数据结构与算法学习 目前30170字
文章借鉴于[尚硅谷]数据结构与算法(Java数据结构与算法),在内容方面会做更改,但是核心依然是他们的学习视频.在这里声明. 1. 线性结构和非线性结构 1.1 线性结构 数据结构包括两大部分,一个叫 ...
- 【Java数据结构与算法】第一章 稀疏数组和队列
第一章 稀疏数组和队列 文章目录 第一章 稀疏数组和队列 一.线性结构和非线性结构 1.线性结构 2.非线性结构 二.稀疏数组 三.队列 1.队列 2.环形队列 一.线性结构和非线性结构 1.线性结构 ...
- JAVA数据结构与算法【稀疏数组】
先看一个实际的需求: 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: 记录数组一共有几行几列,有多少个不同的值 把具有不同值的元素 ...
- 减小程序规模!稀疏数组Sparsearray,数据结构二维数组与稀疏数组转换,Java实现
文章目录 基本介绍 应用实例 基本介绍 当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组. 稀疏数组的处理方法是: ①记录数组一共有几行几列,有多少个不同的值(0除外) ...
- JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...
- java 二维数据结构_JAVA描述算法和数据结构(01):稀疏数组和二维数组转换
一.基本简介 1.基础概念 在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵:与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵.定义非零元 ...
- 数据结构与算法————稀疏数组
引言 数据压缩方面,我们往往可以通过稀疏数组来保存有效数据,节省存储空间. 一.稀疏数组的概念 当一个数组中大部分元素是0,或为同一个值的时候,可以使用稀疏数组来保存数组. 它是一个十分有效的存储结构 ...
最新文章
- 关于读取数据库进行数据处理的一些小问题
- sublime Text 2 安装Sublime Package Control
- react native改变app的图标和名称
- (Metro学习三)图片uri保存到本地图片库
- Emmet使用-----HTML
- python引入模块时import与from ... import的区别
- 计算机科学必读书籍_5篇关于数据科学家的产品分类必读文章
- vue中refs的使用
- XML Schema --simpleType
- libvpx在windows下的编译
- 管理节点连接不上sql节点_华为云IEF智能边缘平台十万边缘节点管理技术深度解读学习笔记...
- Springboot记录
- 学习python的语法规则
- golang 腾讯通用OCR 文字识别 Api 调用
- Word文档标题“多级编号”设置(用于处理 文档二级标题不跟随一级标题序号编号,如 本应该为2.1 结果为1.1)
- 标准偏差:评价数据的离散程度
- Radare2 框架介绍及使用
- 2020李宏毅机器学习笔记-Convolution Netural Network
- 沉睡者 - 微信内测一个手机可注册2微信号
- 《数据库系统概念》8-选择、投影等关系运算