名词:
auto-boxing:
自动装箱(将java中的基本数据类型转换成相应的包装类。 比如Integer i = 1;就会将1装换为一个Integer的对象。)
简介:
SparseArray将整数索引对象,不像一般的数组(索引间有内存间隔),它比HaspMap用Integer索引对象更加省内存。
原因大概有两个:
1:避免了auto-boxing
2:它本身的数据结构在每次mapping的时候都不需要一个额外的输入对象
SparseArray也是一般的数组结构,用二进制查询的方式进行索引,所以它要比HashMap要慢,如果1000以下的数据量,效率也不会慢很多吧,50%以下。
为了优化性能,SparseArray在移除keys的时候做出了优化:不立即删除entry压缩数组,而是标记entry为deleted,然后entry以后可以重用,直到下次garbage collection的时候才处理(garbage collection 将在SparseArray被检索,大小需要增加的时候调用)。
用法:
常用的就是增删改查:
//删除的时候先标记entry为DELETE,再将mGarbage改为true,随时等待回收
Paste_Image.png
//增加的时候用append代替put防止数据越界
Paste_Image.png
if(mGarbage)
gc();
如果需要回收,就先回收
Paste_Image.png Paste_Image.png
网友评论