SparseArray原理和源码解析

SparseArray是Android特有的数据结构,类似HashMap存储<Key, Value>,但通过二分查找定位。它包含mKeys和mValues数组,key按升序排列。源码中,初始容量为10,get()、put()、remove()和clear()操作类似于HashMap。当删除元素时,mGarbage标记需要gc(),gc()实际上是重新排列元素,移除DELETED节点。扩容时,新容量通常是当前容量的两倍。" 133200222,20014861,使用ROS优化函数计算:资源编排与编程实践,"['函数计算', '资源管理', '编程工具', '云计算', '自动化']
摘要由CSDN通过智能技术生成

SparseArray 稀疏数组,Android的特有的数据结构。跟HashMap一样都是存储<Key,Value>的实体。但是不一样的是HashMap利用Hash定位实体位置,而SparseArray利用二分查找法定位位置。

数据结构

SparseArray的数据结构很简单,有mKeys、mValues两个数组,key和value的位置是一一对应的,而key是按照从小到大的
SparseArray

SparseArray使用起来跟HashMap很相似,get()、put()、remove()、clear()

源码分析

重要的变量:

private static final Object DELETED = new Object();
// 当某个key被删除时,对应的value会被置为DELETED

private boolean mGarbage = false;
// 表面看是主动触发gc的标志,实际上是触发重新整理mKeys、mValues的标志

private int[] mKeys;
private Object[] mValues;
private int mSize;
// <key, value>的实际数量

SparseArray的默认初始化容量是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;
    }<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值