字节一面:SparseArray 和 HashMap区别?展开说说

点击“开发者技术前线”,选择“星标????”

让一部分开发者看到未来

来源:https://blog.youkuaiyun.com/baidu_40389775/article/details/86759882

回复“666”,获取一份专属大礼包

相同点:

HashMap和SparseArray,都是用来存储Key-value类型的数据。
于是同样的需要面对几个问题,hash值的计算、扩容、hash冲突、装载率过低

不同点:

数据结构方面:hashmap用的是链表。sparsearray用的是双数组。
性能方面:hashmap是默认16个长度,会自动装箱。如果key是int 的话,hashmap要先封装成Interger。sparseArray的话就就会直接转成int。所以spaseArray用的限制是key是int。数据量小于1k。如果key不是int小于1000的话。可以用Arraymap。

SparseArray三大特点:

双数组、删除O(1)、二分查找

为什么省内存?

HashMap 为了避免过多的哈希冲突,引入了负载因子,打个比方,负载因子使用默认值 0.75,这意味着容量达到了 75%,就会开始扩容,也就是必然有 25% 的空间是不存储数据而被浪费的。而 SparseArray 可以把数组利用到最后一个空间。

复杂度为什么这么低?

SparseArray 做了两个优化:

  1. 引入 DELETE 标记
    既然底层使用了数组,数组的缺点是什么?—— 删除数据时需要搬移元素。SparseArray 对数组的删除不做数据搬移,引入 DELETE 标记,以此达到在删除时做到 O(1) 的时间复杂度。

在调用 size()put()需要扩容时,才去清理 DELETE 标识。

  1. 优化追加元素
    SparseArray 提供了一个 append() 方法,来优化追加的情况。该方法会判断追加的 key 值,是否大于数组中最大的值,如果是则直接追加在数组末尾,否则执行 put() 方法插入 mKey 数组。

 写在最后:

 最近大厂经常会考八股文,所以给读者整理了一份大厂面试真题,需要的可扫码回复“大厂面试”获取。

END

后台回复“面试” “资料” 领取一份干货,数百技术面试手册等你

开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

好文点个在看吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值