Android编程之SparseArray<E>分析
发布时间:2021-12-14 21:33:27 所属栏目:PHP教程 来源:互联网
导读:最近编程时,发现一个针对HashMapInteger, E的一个提示: 翻译过来就是:用SparseArrayE来代替会有更好性能。 那我们就来看看源码中SparseArray到底做了哪些事情: 一、构造 从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小
最近编程时,发现一个针对HashMap<Integer, E>的一个提示: 翻译过来就是:用SparseArray<E>来代替会有更好性能。 那我们就来看看源码中SparseArray到底做了哪些事情: 一、构造 从构造方法我们可以看出,它和一般的List一样,可以预先设置容器大小,默认的大小是10: public SparseArray() { this(10); } public SparseArray(int initialCapacity) { ...... } 二、增 它有两个方法可以添加键值对: public void put(int key, E value) public void append(int key, E value) 在存储数据的时候,是采用了二分法方式,以下是它采用二分法的源码: private static int binarySearch(int[] a, int start, int len, int key) { int high = start + len; int low = start - 1; while (high - low > 1) { int guess = (high + low) / 2; if (a[guess] < key) { low = guess; continue; } high = guess; } if (high == start + len) return start + len ^ 0xFFFFFFFF; if (a[high] == key) { return high; } return high ^ 0xFFFFFFFF; } 所以,它存储的数值都是按键值从小到大的顺序排列好的。 三、查 它有两个方法可以取值: public E get(int key) public E get(int key, E valueIfKeyNotFound) 最后一个从传参的变量名就能看出,传入的是找不到的时候返回的值 查看第几个位置的键: public int keyAt(int index) 查看第几个位置的值: public E valueAt(int index) 查看键所在位置,由于采用二分法查找键的位置,所以没有的话返回小于0的数值,而不是返回-1,这点要注意,返回的负数其实是表示它在哪个位置就找不到了,如果你存了5个,查找的键大于5个值的话,返回就是-6: public int indexOfKey(int key) 查看值所在位置,没有的话返回-1: public int indexOfValue(E value) 四、删 它有四个方法: public void delete(int key) public void remove(int key) 但其实,delete和remove的效果是一样的,remove方法中调用了delete方法,remove源码: public void remove(int key) { delete(key); } public void removeAt(int index) public void clear() 最后一个就是清除全部 五、改 public void setValueAt(int index, E value) public void put(int key, E value) put方法还可以修改键值对,注意:如果键不存在,就会变为添加新键值对 六、其他: SparseArray实现了Cloneable接口,还可以调用clone方法。 小结:既然Android系统建议我们用SparseArray<E>来代替HashMap<Integer, E>,那我们还是按它说的做吧。里面的一些方法,我在这里也已经剖析清楚了,希望能对你们有所帮助。 ![]() (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |