android开发——怕内存不够用?用SparseArray和ArrayMap替代HashMap

为什么要用?

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。

如果对您有用的话赞一下呗!谢谢!

发布了78 篇原创文章 · 获赞 131 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/river66/article/details/89639832
今日推荐