SparseArray 那些事儿(带给你更细致的分析)

前言

说到Android 常用的数据结构,那不得不提一下SparseArray(稀疏数组),我们在很多业务以及Android源码中能见到

基本介绍 (Whate)

简单来讲就是一个使用int作为Key的 Map ,官网的介绍就是:
SparseArrays map integers to Objects

继承关系:

它继承自Object,实现了Cloneable:

image

public class SparseArray<E> implements Cloneable {
   }

其中E就是我们的泛型参数,即我们要存入数据的类型

构造方法:
    public SparseArray() {
   
        this(10);
    }
 
    public SparseArray(int initialCapacity) {
   
    }

我们可以看到,它有两个构造方法,一个参数为容量大小,另一个无参构造方法,最终调用的是容量为10的的构造方法。

增删改查:

既然是一个数据结构,当然要从增删改查来介绍它的基本用法:

使用方法(How)

增:

提供了put和append方法让使用可以放以int 作为key,任何类型作为值的数据。

public void put(int key, E value) 
public void append(int key, E value) 
删:

当然也就是指定某个key去删除

public void delete(int key) 
public void remove(int key) 

也可以删除某个key之后返回删除那个key的值:

public E removeReturnOld(int key) 

因为SparseArray 内部存储是用数组实现的,所以提供了按照数组下标来移除元素的功能(使用的时候要注意数组越界的问题):

public void removeAt(int index) 

还提供了基于数组下标的范围移除的功能(比如从数组的第1个开始往后移除大小3个的):

public void removeAtRange(int index, int size) 
改:

还提供了可以修改某个下标对应值的方法

 public void setValueAt(int index, E value)
查:

根据我们存入的key找到我们的值

public E get(int key) 
public E get(int key, E valueIfKeyNotFound) 

还可以根据数组下标获取值

public E valueAt(int index) 

同样可以根据下标获取key:

public int keyAt(int index) 

也可以根据我们的key或者value反查出下标:

public int indexOfKey(int key) 
public int indexOfValue(E value) 
public int indexOfValueByValue(E value)
  • 特别说明:
    indexOfValue方法通过value值查下标的话,如果多个key都使用了相同的value,只会返回升序查找的第一个符合要求的下标,
其他功能
//大小
public int size()
//清空
public void clear()

看完这里基本用法已经是都介绍完了,当然了解事物三部曲: 是什么、怎么用都讲了,最后一步为什么当然也不能少,下面就来细讲讲它都实现原理:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值