Android性能优化——数据结构的优化
来源:互联网 发布:上海交通大学学报知乎 编辑:程序博客网 时间:2024/06/05 02:49
Android性能优化包含很多方面,今天我们来看看对于数据结构如何做优化。
1.集合的遍历操作:
private void for1(ArrayList<Model> list){ long start = System.currentTimeMillis(); int len = list.size(); for(int i= 0;i < len;i++){ Model model = list.get(i); model.getName(); model.getType(); } long end = System.currentTimeMillis(); Log.d(TAG,"---for1 spend:" + (end - start) + "ms"); } private void for2(ArrayList<Model> list){ long start = System.currentTimeMillis(); for(int i= 0;i < list.size();i++){ Model model = list.get(i); model.getName(); model.getType(); } long end = System.currentTimeMillis(); Log.d(TAG,"---for2 spend:" + (end - start) + "ms"); } private void foreach(ArrayList<Model> list){ long start = System.currentTimeMillis(); for(Model m:list){ Model model = m; model.getName(); model.getType(); } long end = System.currentTimeMillis(); Log.d(TAG,"---foreach spend:" + (end - start) + "ms"); } private void iterator(ArrayList<Model> list){ long start = System.currentTimeMillis(); Iterator<Model> it = list.iterator(); while (it.hasNext()){ Model model = it.next(); model.getName(); model.getType(); } long end = System.currentTimeMillis(); Log.d(TAG,"---iterator spend:" + (end - start) + "ms"); } D/CollectionActivity: ---for1 spend:65ms D/CollectionActivity: ---for2 spend:77ms D/CollectionActivity: ---foreach spend:117ms D/CollectionActivity: ---iterator spend:118ms
计算发现:for1方法的便利速度最快,而改进for循环和Iterator遍历速度明显不如普通for循环速度,而普通for循环中若将list的长度声明为临时变量使用效果更佳。所以在使用ArrayList进行便利操作时尽量采用for1()方法的结构。
2.SpareArray替代HashMap< Integer,Object>
SpareArray是Android提供的类似Map结构的集合,为什么用SpareArray替代HashMap.我们先看一下SpareArray的结构:
public SparseArray(int initialCapacity) { if (initialCapacity == 0) { mKeys = EmptyArray.INT; mValues = EmptyArray.OBJECT; } else { mValues = ArrayUtils.newUnpaddedObjectArray(initialCapacity); mKeys = new int[mValues.length]; } mSize = 0; }
SpaseArray使用int类型做为key值,而HashMap的key值则必须为Integer,这样就导致在使用HashMap时创建了很多Integer对象。
3.ArrayList、LinkedList、Vector比较
ArrayList:线性不安全,可变数组,随机访问很快,删除非头尾元素慢
LinkedList:线性不安全,双链表,随机访问很慢,增删操作很快,不耗费多余资源
Vector:线性安全,可变数组,由于线性安全,所以操作效率低于ArrayList,但内存方面优于ArrayList。
ArrayList与Vector内存占用不同是由于两者的扩容机制不同造成的:
ArrayList:存储元素超过容器大小时,扩大1.5倍
@Override public boolean add(E object) { Object[] a = array; int s = size; if (s == a.length) { Object[] newArray = new Object[s + (s < (MIN_CAPACITY_INCREMENT / 2) ? MIN_CAPACITY_INCREMENT : s >> 1)]; System.arraycopy(a, 0, newArray, 0, s); array = a = newArray; } a[s] = object; size = s + 1; modCount++; return true; }
Vector:按需扩容,每次加1,(elementCount++)
@Override public synchronized boolean add(E object) { if (elementCount == elementData.length) { growByOne(); } elementData[elementCount++] = object; modCount++; return true; }
由此比较,在内存方面Vector表现比ArrayList要好。
0 0
- Android性能优化——数据结构的优化
- Android性能优化——数据结构的优化
- Android性能优化(一)——数据结构优化
- Spark性能优化——优化数据结构
- Android性能优化的——数据库性能优化
- Android性能优化的——Java(Android)代码优化
- Android性能优化——Layout的优化
- Android性能优化——Layout的优化
- 【Android 性能优化】—— 详解内存优化的来龙去脉
- 【Android 性能优化】—— 详解内存优化的来龙去脉
- 【Android 性能优化】—— 详解内存优化的来龙去脉
- 【Android 性能优化】—— 详解内存优化的来龙去脉
- Android性能优化——内存优化
- 性能优化——Android内存优化
- android性能优化——布局优化
- Android性能优化——布局优化
- Android性能优化——内存优化
- Android 性能优化——绘制优化
- Android面试题
- Spring AOP:面向切面编程简介
- Codeforces Round #272 (Div. 2) A Dreamoon and Stairs(水)
- mysql字符集(character set)
- selenium 实现爬虫
- Android性能优化——数据结构的优化
- Mybatis整合Spring
- 安卓快速启动页可加特效
- 第三期 约定 《路由器就是开发板》
- Android性能优化——Layout的优化
- 《解读基金》摘录
- 混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集
- Codeforces Round #272 (Div. 2) B Dreamoon and WiFi(简单DP)
- 他蹲冤狱、斗王石,公司干破产,“死”过好几回,却活出最精彩人生