SparseArray是什么
我们有时候使用HashMap存放数据时,会存入<Integer,Object> 这类的键值对:
![](https://i-blog.csdnimg.cn/blog_migrate/77eda994d7bbd6d58313a87544816574.png)
而在早前编译器会推荐使用SparseArray替代HashMap进行这类键值对的存取。(现在不知道为什么没有提示了)所以其实SparseArray和HashMap大同小异,都是存放键值对的数据结构,只不过SparseArray只用来存放key为简单类型int型的键值对。
为什么要用SparseArray?
SparseArray的注解(百度翻译):
SparseArray将整数映射到对象,与普通的对象数组不同,它的索引可以包含间隙。SparseArray旨在比HashMap更节省内存,因为它避免了自动装箱键,并且其数据结构不依赖于每个映射的额外entry对象。
注意,这个容器将其映射保存在数组数据结构中,使用二进制搜索来查找键。该实现不适用于可能包含大量项的数据结构。它通常比HashMap慢,因为查找需要二进制搜索,添加和删除需要在数组中插入和删除条目。对于容纳数百件物品的容器,性能差异小于50%。
为了提高性能,容器在删除键时包含了一个优化:它不会立即压缩数组,而是将删除的条目标记为已删除。然后,该条目可以重新用于同一个键,或者稍后在所有删除的条目的单个垃圾收集中进行压缩。每当阵列需要增长时,或者当检索映射大小