前言
说到Android 常用的数据结构,那不得不提一下SparseArray(稀疏数组),我们在很多业务以及Android源码中能见到
基本介绍 (Whate)
简单来讲就是一个使用int作为Key的 Map ,官网的介绍就是:
SparseArrays map integers to Objects
继承关系:
它继承自Object,实现了Cloneable:
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()
看完这里基本用法已经是都介绍完了,当然了解事物三部曲: 是什么、怎么用都讲了,最后一步为什么当然也不能少,下面就来细讲讲它都实现原理: