SparseArray使用及源码分析
使用方法
SparseArray源码来自:android-28 android.util.SparseArray
首先看一下SparseArray的基本使用方法:
/**
* 创建对象
*/
SparseArray<String> sparseArray = new SparseArray<>();
/**
* 添加元素
*/
sparseArray.append(0, "str1");
sparseArray.put(1, "str2");
/**
* 删除元素,两种方式等同
*/
sparseArray.remove(1);
sparseArray.delete(1);
/**
* 修改元素,put或者append相同的key值即可
*/
sparseArray.put(1, "str3");
sparseArray.append(1, "str4");
/**
* 查找,遍历
*/
//方式1
for (int i = 0; i < sparseArray.size(); i++) {
Log.i(TAG, sparseArray.valueAt(i));
}
//方式2
for (int i = 0; i < sparseArray.size(); i++) {
int key = sparseArray.keyAt(i);
Log.i(TAG, sparseArray.get(key));
}
SparseArray和HashMap有点相似,唯一不同的就是key和value的类型,HashMap的key值和value值为泛型,但是SparseArray 的key值只能为int 类型,value值为Object类型。
原理分析
private static final Object DELETED = new Object();
private boolean mGarbage = false;
private int[] mKeys;
private Object[] mValues;
private int mSize;
这里先解释一下这几个变量:
1.DELETED是一个标志字段,用于判断是否删除
2.mGarbage也是一个标志字段,用于确定当前是否需要垃圾回收
3.mKeys数组用于存储key
4.mValues数组用于存储值
5.mSize表示当前SparseArray有几个元素
接下来看几个重要方法: