SparseArray 稀疏数组,Android的特有的数据结构。跟HashMap一样都是存储<Key,Value>的实体。但是不一样的是HashMap利用Hash定位实体位置,而SparseArray利用二分查找法定位位置。
数据结构
SparseArray的数据结构很简单,有mKeys、mValues两个数组,key和value的位置是一一对应的,而key是按照从小到大的
SparseArray使用起来跟HashMap很相似,get()、put()、remove()、clear()
源码分析
重要的变量:
private static final Object DELETED = new Object();
// 当某个key被删除时,对应的value会被置为DELETED
private boolean mGarbage = false;
// 表面看是主动触发gc的标志,实际上是触发重新整理mKeys、mValues的标志
private int[] mKeys;
private Object[] mValues;
private int mSize;
// <key, value>的实际数量
SparseArray的默认初始化容量是10。
public E get(int key) {
return get(key, null);
}
public E get(int key, E valueIfKeyNotFound) {
// 二分查找
int i = ContainerHelpers.binarySearch(mKeys, mSize, key);
if (i < 0 || mValues[i] == DELETED) {
// 表示没找到或者对应的被删除
return valueIfKeyNotFound;
}<