记录SparseArray的使用方法和使用过程遇到的问题

SparseArray中的indexOfValue(E value)使用的时候要特别注意,源码里面是

    public int indexOfValue(E value) {
        if (mGarbage) { gc(); }//这一句不用管
        for (int i = 0; i < mSize; i++) {
        //这个地方比较就是对内地址做了比较,不像是equals方法比较常量对象
        //进行了比较,如果不注意随意使用,你就会发现返回值一直是-1,我是在使用split的时候遇到这
        //个问题的。只有自己进行遍历,然后使用equals方法就可以找到值。
            if (mValues[i] == value) {
                return i;
            }
        }
        return -1;
    }

错误代码:

        SparseArray<String> sparseArray = new SparseArray<>();
        String a = "a,b,c";
        String[] strs = a.split(",");
        sparseArray.put(0,"aa");
        sparseArray.put(1,"a");
        Log.d("abcd", "onCreate: "+sparseArray.indexOfValue(a));

代替indexOfValue的方法就是:
SparseArray sy = new SparseArray<>();
for(int i = 0;i<sy.size();i++){
if(“aa”.equals(sy.valueAt(i))){
Log.d(“abcd”,i);//i就是index
}
}
基础用法很简单:

    SparseArray<String> array = new SparseArray<>();
        array.put(1,"a");
        array.put(2,"b");
        array.put(3,"c");

这个是真的坑,刚开始没注意到,花了我一段时间进行测试,才找到这个坑。
SparseArray sa = new SparseArray()<>;
可以直接获取sa.get(1) == null;而ArrayList这样做则会报数组越界。因为SparseArray的key和value是两个数组,已经经过初始化了,然后本身可以自动扩容,每次扩容是上次的2倍。
后续继续补充。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值