聊聊SparseArray

首先从字面意思来理解下这个概念:

SparseArray = Sparse +Array
翻译下就是稀疏数组,也就是说首先它是一个数组,然后它的特性是稀疏

接下来说说为什么会有这种结构的存在?

我们都知道在Java中(这里只讨论Java),数组都是第一时间定义,然后初始化出来,最后才能使用的,也就是说在我们实际使用之前,数组已经在内存中进行内存分配,并进行值得初始化,这样的话,就有一个问题,我们不一定能够实际使用玩这些空间,应该这么说我们一定使用不完这些空间,因为在实际开发中,如果非要使用数组,那么一般情况下,我们会声明一个比我们预想中占空间更大的数组。
问题已经说清楚,而SparseArray 就是来解决数组会出现的空间浪费问题,提高效率。

举个例子

举个比较简单 而且易懂的例子。
五子棋盘基本可以用二维数组来表示。

IntArr[m][n];

在初始阶段,必须就声明去棋盘大小的数组,在绝大多数情况下,这个数组的空间都是浪费状态的,这种时候,我们就可以使用稀疏数组来压缩数组。
这里必须说明的是,稀疏数组是可以在不用数组的时候节省空间,而在要使用数组的时候,必须还原为之前的数组,这也就是说,稀疏数组只是在不用的时候进行压缩,而在实际需要使用数组的时候,稀疏数组做不到代替原数组。为什么?接下来继续看。

稀疏数组的原理

稀疏数组本质上来说,就是比原数组小很多的数组,只不过它只记录原数组中有数据记录的值,以及相关信息,以此来在需要的时候来还原原数组。我们现在以原数组为二维数组来说明。
如果原数组是一个二维数组,那么对应的稀疏数组应该是这么个结构

rowcolvalue

也就是说,列数是不变的,当然这针对二维数组而言。但是也可以说它是不变的,因为完全可以用现有数组的值去定义稀疏数组的列数 维数+1即可。

可以形象的对比下,假如我们的原数组是6*6的二维数组:

逻辑结构大概如表格这样。
而对应的稀疏数组:

rowcolvalue

跟之前差不多,只是行数没有固定,因为行数是存储原数组中的数据的,所以,稀疏数组的行数肯定是小于原数组的。
这么对比一看,稀疏数组是不是真的可以节省很多空间呢?

之前也强调过了,稀疏数组无法代替原数组,只是在不需要原数组的时候,将其进行压缩,在需要的时候进行还原。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值