SparseArray
稀疏数组,是Android内部特有的api,标准的jdk是没有这个类的.
SparseArray保存的是Integer到Object的映射。和普通Array不同,SparseArray允许索引之间存在间隔,在Android中用来替代HashMap<Integer, Object>这种形式,目的是节省内存:一方面,SparseArray不会进行自动装箱的操作;另一方面,SparseArray不依赖于额外的Entry数据结构。
SparseArray的map关系是通过两个数组来实现的,通过二分查找来查找key。这个数据结构的设计意图不是用来存储大量的数据的。通常来说,SparseArray的效率低于HashMap,因为查找需要通过二分查找,而添加和删除需要通过数组的插入和删除操作进行。对于几百项的数据量,性能的差别不大,少于50%.
为了提高性能,SparseArray对删除操作进行了优化:在删除元素,并不会马上把数组中的元素移除,而是会先把该元素标记为已删除。该项在之后可以得到复用(key不变),或者在之后的垃圾回收过程中进行统一的移除。垃圾回收发生在以下几种情况:数据容量需要发生改变、map的size发生改变或者元素值被检索。
SparseArray可以通过keyAt
和valueAt
方法进行遍历。
SparseArray的成员如下:
可以看到,SparseArray添加和获取删除元素的方式都和HashMap类似。