Android稀疏矩阵SparseArray
来源:互联网 发布:120网络歌曲 打包下载 编辑:程序博客网 时间:2024/05/19 18:45
Java提供了HashMap<key, value>存储key/value的数据类型,而Android提供了优化的实现方式:SparseArray<E>、SparseBooleanArray、SparseIntArray、SparseLongArray,进一步提高了效率。
部分定义代码如下:
public class SparseArray<E> implements Cloneable { // map Integers to Objects private int[] mKeys; private Object[] mValues; private int mSize; ......
public class SparseBooleanArray implements Cloneable { // map Integers to Booleans private int[] mKeys; private boolean[] mValues; private int mSize; ......
public class SparseIntArray implements Cloneable { // map Integers to Integers private int[] mKeys; private int[] mValues; private int mSize; ......
public class SparseLongArray implements Cloneable { // map Integers to Longs private int[] mKeys; private long[] mValues; private int mSize; ......
从代码可以看出,实现方式相似,只是根据values的类型不同,定义了不同的数据类型。另外需要注意的是采用了基本数据类型,避免了数据的自动拆装箱,因此空间效率高。另外这些对象以数组来保存映射关系,并使用二分查找来查找key。这种实现方式并不适合于大量的数据集。由于查找需要二分查找,添加和移除需要插入和删除数组中的元素,因此一般情况下都会比HashMap更慢。如果包含了数百元素,这个性能差别就不是很明显,小于50%。
为了提高性能,对移除操作进行了优化:并不立即压缩数据,而是将移除的元素标记为“deleted”。这个元素之后能被相同的key值所重用,或者在之后的gc环节将移除的所有元素一起压缩。可以在数组增长、映射大小或者元素值被获取的任何时候,gc操作都需要被执行。
遍历的方法:
int key = 0;for(int i = 0; i < sparseArray.size(); i++) { key = sparseArray.keyAt(i); Object obj = sparseArray.get(key); //或者 Object obj = sparseArray.valueAt(i);}
另外,在android.support.v4.util下,提供了一些补充类:
public class LongSparseArray<E> implements Cloneable { // map Longs to Objects private long[] mKeys; private Object[] mValues; private int mSize;
参考资料:
1、...sdk/docs/reference/android/util/SparseArray.html
2、http://www.liaohuqiu.net/cn/posts/sparse-array-in-android/
0 0
- Android稀疏矩阵SparseArray
- Android SparseArray(稀疏数组)
- Android优化工具SparseArray稀疏数组
- Android SparseArray指的是稀疏数组(Sparse array)
- SparseArray(稀疏数组)
- SparseArray稀疏数组浅析
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- 稀疏矩阵
- Javascript(一)-17-(JS函数_动态函数)
- C++ - 操作符的优先级
- ural 1106. Two Teams
- 设计模式之Bridge模式
- Spring获取ApplicationContext
- Android稀疏矩阵SparseArray
- Javascript(一)-18-(JS函数_匿名函数)
- jvm垃圾回收算法
- Java基础 笔记(四)
- org.apache.subversion.javahl.ClientException: Previous operation has not finished
- Javascript(一)-19-(JS函数_练习1)
- 成功从时间管理开始
- CGI
- 文章标题