Android——性能优化之SparseArray

相信大家都用过HashMap用来存放键值对,最近在项目中使用HashMap的时候发现,有时候 IDE 会提示我这里的HashMap可以用SparseArray或者SparseIntArray等等来代替。

SparseArray(稀疏数组).它是Android内部特有的api,标准的jdk是没有这个类的.在Android内部用来替代HashMap<Integer,E>这种形式,使用SparseArray更加节省内存空间的使用,SparseArray也是以key和value对数据进行保存的.使用的时候只需要指定value的类型即可.并且key不需要封装成对象类型.

首先是创建:

SparseArray<Student> sparseArray = new SparseArray<>();
SparseArray<Student> sparseArray = new SparseArray<>(capacity);//这里是可以指定长度的

插入:

sparseArray.put(int key,Student value);// 这里SparseArray存放的键值对中的键是int型的数据

获取:

sparseArray.get(int key);
sparseArray.get(int key,Student valueIfNotFound);

删除:

sparseArray.remove(int key);// 通过int类型的键删除指定的值

index:

因为是可以替代HashMap的,前面的方法和其没有太大区别。而这个index就是SparseArray所特有的属性了,SparseArray从名字上看就能猜到跟数组有关系,事实上他底层是两条数组,一组存放key,一组存放value,知道了这一点应该能猜到index的作用了...

sparseArray.indexOfKey(int key);
sparseArray.indexOfValue(T value);
sparseArray.keyAt(int index);
sparseArray.valueAt(int index);
sparseArray.setValueAt(int index);
sparseArray.removeAt(int index);
sparseArray.removeAt(int index,int size);

注:通过对SparseArray[index]底层源码的分析---SparseArray每次的插入方式都需要调用二分查找.因此这样在倒序插入的时候会导致情况非常的糟糕,效率上绝对输给了HashMap学过数据结构的大家都知道.Map在插入的时候会对冲突因子做出相应的决策.有非常好的处理冲突的方式.不需要遍历每一个值.因此无论是倒序还是正序插入的效率取决于处理冲突的方式,因此插入时牺牲的时间基本是相同的.

猜你喜欢

转载自blog.csdn.net/qq_40837613/article/details/83302994