Android 性能优化之稀疏数组SparseArray<E>

SparseArray<E> 就是对数组的压缩,用一种压缩方式来表示数组。

在我们定义数组的时候 ,数组中 有时候会有大部分内容 未被使用(或为0),造成内存控件的浪费。为了节省内存控件,且不影响数组中原有的数据,我们就采用了一种压缩方式来表示数组。

技术分享

 

图中黄色显示的是我们使用了的元素,这里其他 元素都被浪费了 。来看看 用 稀疏 数组 表示的 方法

技术分享

稀疏数组的 第一部分 表示了 数组的行数 、列数、以及元素使用的个数。第二部分 记录了 使用了的 元素在 原数组中的 位置 及 内容 。

SparseArray的使用:

 

public void put(int key, E value) {}

public void append(int key, E value){}

public void delete(int key) {}

public void remove(int key) {} //直接调用的delete(int key)

public void removeAt(int index){}

public void clear(){}

/**
源码中的处理是 :如果 put 的数据已经存在 ,就是修改 ,否则就是添加
**/
public void put(int key, E value)

public void setValueAt(int index, E value)

 

public E get(int key)

public E get(int key, E valueIfKeyNotFound)
/**
查看第几个位置的键:
*/
public int keyAt(int index)  
/**
查看第几个位置的值
*/
public E valueAt(int index)  
/**
查看键所在位置
找不到时返回小于0的数值,而不是返回-1。返回的负值是表示它在找不到时所在的位置。
*/
public int indexOfKey(int key)
/**
查看值所在位置,没有的话返回-1
*/
public int indexOfValue(E value)

SparseBooleanArray <---> HashMap<Integer, Boolean>

SparseIntArray <---> HashMap<Integer, Integer>

SparseArray是android里为Hashmap<Interger,Object>这样类的而专门写的,目的是提高效率,其核心是折半查找函数(binarySearch)

HashMap<Integer, E> hashMap = new HashMap<Integer, E>(); <-----> SparseArray<E> sparseArray = new SparseArray<E>();

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。