记录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;
    }

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

    SparseArray 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倍。
后续继续补充。

你可能感兴趣的:(android开发)