中压缩数组_Java稀梳数组,什么是稀梳数组?为什么使用稀梳数组?
![](/assets/blank.gif)
别让怯弱否定自己,别让惫懒误了青春。
简介
- 有些时候,一个二维数组中很多值默认为0,因此很多无意义数据,这个时候就可以使用稀梳数组,例如:一个棋盘 10*10,但是只落下了两颗子,需要你保存整个棋盘的布局
![](/assets/blank.gif)
// 以上面棋盘为例,0代表无棋子,1代表黑棋子,2代表白棋子,数组结构如下:int[] ints = new int0 0 0 0 00 1 0 0 00 0 2 0 00 0 0 0 00 0 0 0 0
原理
- 记录数组一共有几行几列,有多少个地方存在不同的值
- 把不同值得元素及值记录在一个全新创建的小规模的数组中,从而压缩数据大小
示例
// 以上面5*5棋盘为例:// 2排第二个不同// 3排第3个不同int[] ints = {{5,5,2},{1,1,1},{2,2,2}} // 5行5列2个不同值
相互转化
// 原始数组int[][] ints = new int[5][5];ints[1][1] = 1;ints[2][2] = 2;for (int[] intArray : ints) {for(int intValue : intArray) {System.out.print(intValue+"t");}System.out.println();}// 输出---------------0 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 // 转化为稀疏数组--------------// 1.获取有效值数量,遍历二维数组得到有效的个数int sum = 0;for (int i = 0; i < ints.length; i++) {for (int j = 0; j < ints[i].length; j++) {if(ints[i][j] != 0){sum ++;}}}System.out.println(sum);// 转化为稀疏数组-------------int[][] sparseArray = new int[sum+1][3];sparseArray[0][0] = 5;sparseArray[0][1] = 5;sparseArray[0][2] = sum;int sumSparse = 0;for (int i = 0; i < ints.length; i++) {for (int j = 0; j < ints.length; j++) {if(ints[i][j] != 0){sumSparse++;sparseArray[sumSparse][0] = i;sparseArray[sumSparse][1] = j;sparseArray[sumSparse][2] = ints[i][j];}}}for (int i = 0; i < sparseArray.length; i++) {System.out.printf("%dt%dt%dtn",sparseArray[i][0],sparseArray[i][1],sparseArray[i][2]);}// 输出稀疏数组-------------5 5 2 1 1 1 2 2 2 // 还原稀疏数组-----------// 根据稀疏数组第一行生成数组长度int renewArray[][] = new int [sparseArray[0][0]][sparseArray[0][1]];// 根据稀疏数组的值还原数组for (int i = 1; i < sparseArray.length; i++) {renewArray[sparseArray[i][0]][sparseArray[i][1]] = sparseArray[i][2];}for (int[] row : renewArray) {for(int data : row) {System.out.printf("%dt",data);}System.out.println();}
应用场景
- 用于压缩数据
- 使用稀疏数组,保存棋盘、地图之类的二维数组
- 把稀疏数组还原成原来的二维数组
本文作者《猿氏·凯》,如果雷同,纯属抄袭····
中压缩数组_Java稀梳数组,什么是稀梳数组?为什么使用稀梳数组?相关推荐
- java数组中怎么去重_java数组去重怎么弄???大神来解
[Java] 纯文本查看 复制代码public class TestDemo { public static void main(String[] args) { //10个整数{9,10,6,6,1 ...
- java 映射数组_Java中的数组,列表,集合,映射,元组,记录文字
java 映射数组 有时,当我对JavaScript的强大功能和表现力感到兴奋时,我发现自己错过了Java世界中的一两个功能. 除了lambda表达式/闭包或任何您想称为"匿名函数" ...
- java声明和初始化数组_Java 中初始化数组
数组是一种有用的数据类型,用于管理在连续内存位置中建模最好的集合元素.下面是如何有效地使用它们. -- Chris Hermansen(作者) 有使用 C 或者 FORTRAN 语言编程经验的人会对数 ...
- 扩容是元素还是数组_Java中对数组的操作
数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对于数组的实现及处理也不尽相同. Java语言中提供的数组是用来存储固定大小的同类型元素.如:声明一个数组变量,numbers[100]来 ...
- java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...
java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...
- Java方法中数组_Java中数组常用方法的总结
将截取一部分旧数组中的元素,复制给新数组, 反之,如果大于旧数组的长度,则将以 0 , null ,或 false 给予补充. 例:快速复制数组? public class Practice{ pub ...
- 转数组_Java中IO必杀技-文件转字节数组
在Java开发中,无论是文件存储还是别的操作,需要经常把文件转化为字节数组,常规的做法就是用内存字节输出流ByteArrayOutPutStream 转化,这样虽然可以实现但是还是有些麻烦,今天教大家 ...
- java 数组对象属性数组_Java中数组的特性
数组是基本上所有语言都会有的一种数据类型,它表示一组相同类型的数据的集合,具有固定的长度,并且在内存中占据连续的空间.在C,C++等语言中,数组的定义简洁清晰,而在java中确有一些会让人迷惑的特性. ...
- java单词转化为数组_java中数组与List相互转换的方法
1.List转换成为数组.(这里的List是实体是ArrayList) 调用ArrayList的toArray方法. toArray public T[] toArray(T[] a)返回一个按照正确 ...
最新文章
- python Unicode转ascii码的一种方法
- [C++]C++11:Function与Bind
- 【ABAP】Smartforms无法打印特殊字符问题处理方案
- 2.2 数个常用的特殊符号
- c语言行列倒置算法,循环行列的元素倒置。求指点
- 为啥非要用Python?Excel不香吗?
- 【转】非常道-中小软件公司项目管理
- go语言结构体作为函数参数,采用的是值传递
- java连接远程带有密码的mongodb数据库
- 配置Typescript+Node环境
- CTF古典密码:移位密码
- Mac系统PR2022安装BeatEdit插件遇到各种问题解决
- Matlab中table2array函数使用
- Goonie企业竞争情报系统评为选中国优秀网络应用软件奖
- 三维重建 | 单张RGB图片生成三维网格模型
- 使用SaltStack Returner将Salt作业信息接入Elasticsearch的实践(踩坑)
- IEEE Access 算法 伪代码排版出错
- 名帖86 蔡襄 行楷《谢赐御书诗表》
- 嵌入式linux 系统支持usb wifi BL-R8723BT1
- MediaPlayer+SurfaceView实现视频播放器