SparseArray 是 Android 平台特有的,引入 SparseArray 的目的是替代 HashMap 从而节省内存空间,其用法与 HashMap很类似。由 SparseArray 又可以派生出 SparseLongArray 和 LongSparesArray。要说 SparseLongArray 和 LongSparesArray 的区别,先来说一下 SparseArray。
从源码可以看到,SparseArray 的内部是通过两个数组对数据进行存储的, key 为 int 类型数组, 而 value 为 Object 类型数组。SparseArray 比 HashMap 更省内存、在某些条件下性能更好的主要原因是它避免了对 key 的自动装箱(int 转为 Integer 类型)。关于 SparseArray 的更多细节(如添加删除使用二分查找)就不展开了。
因此,SparseArray 的 key 必须为 int 类型。
SparseArray 默认的 value 可以为任意类型,因此根据 value 类型不同,又可以细分派生出 SparseIntArray(key 为 int, value 为int)、SparseBooleanArray(key 为 int, value 为 boolean)、SparseLongArray(key 为 int, value 为 long) 等,使用方法与 SparseArray 大同小异。其中,SparseLongArray 如下:
前面说了, SparseArray 的 key 必须为 int 类型,而对于“特殊的 int 类型” — long , 也有相应的类来处理,这就是LongSparesArray:
可以看到,LongSparesArray 的 key 为 long 类型。
总结:
SparseArray :key为 int, value 任意。
SparseLongArray:key 为 int, value 为 long。
LongSparesArray: key 为 long , value 任意
因此,当 key 为 int 或者 long 的时候,可以使用这三种来替代 HashMap 了。