Android之SparseArray

Android之SparseArray

这几天在阅读他人代码时,看到sparseArray这个类,以前从来没见过这个类,所以查看了下源代码,下面介绍一下它的作用:

1.SparseArray类似HashMap,其作用是保存键值对(int,object),其中key只可以保存整形,并且它所占的内存比hashmap小

private int[] mKeys;
private Object[] mValues;
private int mSize;
通过以上代码,我们发现,SparseArray它以两个数组来存储数据


public SparseArray() {
        this(10);
}
<pre style="background-color:#ffffff;color:#000000;font-family:'宋体';font-size:10.5pt;"><pre name="code" class="html">public SparseArray(int initialCapacity) {
        if (initialCapacity == 0) {
            mKeys = EmptyArray.INT;
            mValues = EmptyArray.OBJECT;
        } else {
            mValues = ArrayUtils.newUnpaddedObjectArray(initialCapacity);
            mKeys = new int[mValues.length];
        }
        mSize = 0;
    }
 
 

使用第一个构造方法,默认大小为10,使用第二个构造方法是,我们可以自己制定数据的大小

    public E get(int key) {
        return get(key, null);
    }
    public E get(int key, E valueIfKeyNotFound) {
        int i = ContainerHelpers.binarySearch(mKeys, mSize, key);

        if (i < 0 || mValues[i] == DELETED) {
            return valueIfKeyNotFound;
        } else {
            return (E) mValues[i];
        }
    }

get()返回与key对象的value,如果数组中没有制定的key,默认放回为空。

get(int key, E valueIfKeyNotFound)使用binarySearch二分法查找,返回与key对应的value,如果未找到指定的value或者是找到的value为空,则返回valueIfKeyNotFound


<pre name="code" class="java">    public void delete(int key) {
        int i = ContainerHelpers.binarySearch(mKeys, mSize, key);

        if (i >= 0) {
            if (mValues[i] != DELETED) {
                mValues[i] = DELETED;
                mGarbage = true;
            }
        }
    }
 使用delete(int key)删除与key对应的value 

    public int keyAt(int index) {
        if (mGarbage) {
            gc();
        }

        return mKeys[index];
    }
    public E valueAt(int index) {
        if (mGarbage) {
            gc();
        }

        return (E) mValues[index];
    }
键值查询,可以实现遍历操作

    public int indexOfKey(int key) {
        if (mGarbage) {
            gc();
        }

        return ContainerHelpers.binarySearch(mKeys, mSize, key);
    }
    public int indexOfValue(E value) {
        if (mGarbage) {
            gc();
        }

        for (int i = 0; i < mSize; i++)
            if (mValues[i] == value)
                return i;

        return -1;
    }
获取键值第一次出现的位置


这就是SparseArray的一些方法介绍




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值