您的位置:首页 > 移动开发 > Android开发

Android:使用SparseArray代替HashMap优化性能

2015-08-17 17:20 447 查看
之前看到一篇关于adapter的文章用到了SparseArray,所以在这里写写关于SparseArray的用法。

SparseArray是官方针对安卓所写的容器,与HashMap类似,不过性能比HashMap好。

SparseArray实现了Cloneable接口,还可以调用clone方法。

首先看看SparseArray的用法:

构造:

SparseArray的构造与我们用惯的HashMap,ArrayList一样也是new出一个实例然后使用。

SparseArray<E> sa=new SparseArray<E>();
顺便提一下java1.7支持这样写:

SparseArray<E> sa=new SparseArray<>();


也可以在构造的时候就指定大小:

SparseArray<E> sa=new SparseArray<E>(11);
如果构造的时候不指定大小,则默认为10

添加元素:

用惯ArraList和HashMap的我们知道要往容器里面添加元素可以分别调用add和put方法。
SparseArray也一样,可以调用put(int key,E value);
相信有读者一经发现上面构造SparseArray的时候已经发现,构造的时候只指定一个泛型,而不像HashMap那样构造的时候要指定两个泛型类型:
new HashMap<String,String>();

只需要这样:
SparseArray<E> sa=new SparseArray<E>();
那是因为SparseArray的键只能是int形式所以构造的时候只指定值得泛型即可。同时也就是说,只能在键为int形式的时候可以使用SparseArray其它情况还是需要使用Map。
除了put方法可以往SparseArray添加元素之外,还可以通过append添加元素。
public void append(int key, E value)
SparseArray储存数据是使用二分法储存,说储存的数据是根据键的大小,从小到大排列。

取值:

既然可以添加那么自然可以取出来:
public E get(int key) ;
根据键取值。
除此之外还有一个方法可以取值:
public E get(int key, E valueIfKeyNotFound) ;
可以看到多了一个参数,从第二个参数的名字可以猜到,当找不到该键的值得时候默认使用第二个参数的值。

除了按键取值之外还可以按顺序取键,按顺序取值:
查看第几个位置的值:
public int keyAt(int index)

查看第几个位置的键:
public E valueAt(int index)
如果所查的键或值没有的话会返回负数。

删除:

delete(int key)
remove(int key) delete与remove的效果是一样的这里不多说
除此之外还有:
removeAt(int index)
//按顺序删除

clear() 全部清空

改:

public void setValueAt(int index, E value)
public void put(int key, E value)


setValueAt可以将index位置上的值改成value
而put方法前面说过,如果说put进去的键已经存在那么就会覆盖,达到修改的效果。如果put进去的键还没有的话就增加。

说完基本的增删改查再扯一下其它:

既然官方推荐使用SparseArray,那么在编码过程中遇到键为int形式的则尽量使用SparseArray代替map。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: