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

本文探讨了在Android开发中,为何在特定情况下使用SparseArray和ArrayMap代替HashMap,强调它们在数据量小时的速度优势和大数据量时的内存效率。并提供了使用示例,指出在键值为Integer时使用SparseArray,其他情况使用ArrayMap,以避免装箱操作提高效率。同时,文章提到了SparseArray和ArrayMap的原理,但表示对其“稀疏”特性理解不足,期待读者指导。

为什么要用?

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。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值