为什么要用?
1、数据量小的时候,SparseArray和ArrayMap速度快效率高。
2、数据量大的时候,SparseArray和ArrayMap更省内存。
3、官方推荐。
怎么用?
当你有需要使用HashMap<Integer, Object>的时候,即键值为Integer时,可以使用SparseArray(稀疏数组)。避免了int和Integer的装箱问题,在这方面,效率有了提高。键值不是int类型的,则用ArrayMap。看下使用样例代码:
SparseArray<Object> sparseArray = new SparseArray<>();
sparseArray.put(66, new Object());
sparseArray.put(33, new Object());
//遍历key和value
for (int i = 0; i < sparseArray.size(); i++) {
int key = sparseArray.keyAt(i);
Object object = sparseArray.valueAt(i);
//这里拿到的key和object是一一对应的
}
ArrayMap<String, Object> arrayMap = new ArrayMap<>();
arrayMap.put("aaa", new Object());
arrayMap.put("bbb", new Object());
//遍历key和value
for(int i=0;i<arrayMap.size();i++){
String key = arrayMap.keyAt(i);
Object object = arrayMap.valueAt(i);
//这里拿到的key和object是一一对应的
}
SparseArray原理:(我没发现这两个数组哪里稀疏了,很尴尬!有错误的地方还请大神们指出,谢谢!)
private int[] mKeys;//排好序的数组,通过二分查找操作增删改查
private Object[] mValues;//mValues的index和mKeys的index是相同的
private int mSize;//上面两个数组的元素个数都是mSize
ArrayMap原理:
int[] mHashes;//存入key对象的hash值,也是排好序的,二分查找操作。
Object[] mArray;//这里面放的数据是:[key,value,key,value,key,value...]
int mSize;//mHashes的元素个数是mSize,mArray的元素个数是2*mSize。
如果对您有用的话赞一下呗!谢谢!