自己学习笔记,仅供自己参考,如有不对欢迎指正
大多数情况下当key为int的时候,推荐使用SpareArray
代替HashMap
-
性能方面:
int作为key
,hashMap会强制使用Integer进行包装,而SpareArray内部是一个数组和一个Object数组,可以直接使用Int,减少装箱操作。 -
内存方面:SpareArray是使用的双数组的方式,HashMap为了避免哈希冲突,引入负离子,默认是
0.75
,也就是说会有25%的空间被浪费,而SpareArray会利用的最后一个元素。 -
查找速度:内部使用的
二分查找法
,小数据量更高效 -
SparseArray内部两个优化:
数组的缺点:插入和删除的效率低
-
对于删除的优化,引入
DELETE 标记
SparseArray 对数组的删除不做数据搬移,引入 DELETE 标记,以此达到在删除时做到 O(1) 的时间复杂度。在调用size()
和put()
需要扩容时,才去清理 DELETE 标识。 -
对于插入的的优化,提供
append() 方法
通过 append() 方法,来优化追加的情况。该方法会判断追加的 key 值,是否大于数组中最大的值,如果是则直接追加在数组末尾,否则执行 put() 方法插入 mKey 数组。
网友评论