ArrayList和Vector

ArrayList和Vector都是内部以数组实现的List,它们两唯一的区别就是对多线程的支持,ArrayList是线程不安全的,而Vector内部对大多数方法都做了同步,是线程安全的,既然是线程安全的,所以性能方面肯定不如ArrayList了(当然想法肯定是对的),不过这需要看哪方面了,ArrayList在add、get、remove等操作效率肯定是高于Vector的,而在内存方面,Vector却比ArrayList表现的更好。

实现RandomAccess接口的集合使用for遍历

先谈谈List集合的遍历方式,有三种:foreach、iterator、for。 
而在开发中一般需要遍历时首选肯定是foreach了,因为它效率高,这个观点没错,不过需要分场合了。 
下面是我用这三种方式测试遍历有100w条数据的ArrayList集合:

 long start = System.currentTimeMillis();
for (int i = ; i < size; i++) {
data.get(i);
}
long end = System.currentTimeMillis();
Log.v("log","for花费:"+(end-start)); start = System.currentTimeMillis();
for (Integer integer : data) { }
end = System.currentTimeMillis();
Log.v("log","foreach花费:"+(end-start)); Iterator<Integer> iterator = data.iterator();
start = System.currentTimeMillis();
while (iterator.hasNext()){
   iterator.next();
}
end = System.currentTimeMillis();
Log.v("log","iterator花费:"+(end-start));
- ::44.276 -/? V/log: for花费:
- ::44.380 -/? V/log: foreach花费:
- ::44.476 -/? V/log: iterator花费:

因为ArrayList和Vector集合内部实现由数组实现,所以随机访问的速度是很快的。对于可以进行随机访问的List,JDK为它们实现了RandomAccess接口,表示支持快速随机访问。

结论:对于实现了RandomAccess接口的集合,for效率表现的最好。

而在遍历有1w条数据的LinkedList集合时:

- ::44.276 -/? V/log: for花费:
- ::44.380 -/? V/log: foreach花费:
- ::44.476 -/? V/log: iterator花费:

则foreach表现最佳。

结论:对LinkedList等以链表实现的集合遍历时使用foreach或者iterator性能最佳,因为foreach的实现就是通过iterator实现的。

我们可以这样判断该List遍历用哪种方式:

if (list instanceof RandomAccess){
for (int i = ; i < list.size(); i++) {}
} else {
Iterator<?> iterator = list.iterator();
while (iterator.hasNext()){
iterator.next();
}
}

Android的性能优化的更多相关文章

  1. Android应用性能优化(转)

    人类大脑与眼睛对一个画面的连贯性感知其实是有一个界限的,譬如我们看电影会觉得画面很自然连贯(帧率为24fps),用手机当然也需要感知屏幕操作的连贯性(尤其是动画过度),所以Android索性就把达到这 ...

  2. Android客户端性能优化(魅族资深工程师毫无保留奉献)

    本文由魅族科技有限公司资深Android开发工程师degao(嵌入式企鹅圈原创团队成员)撰写,是degao在嵌入式企鹅圈发表的第一篇原创文章,毫无保留地总结分享其在领导魅族多个项目开发中的Androi ...

  3. Android APP 性能优化的一些思考

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  4. 包建强的培训课程(9):Android App性能优化

    v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VM ...

  5. Android app 性能优化的思考--性能卡顿不好的原因在哪?

    说到 Android 系统手机,大部分人的印象是用了一段时间就变得有点卡顿,有些程序在运行期间莫名其妙的出现崩溃,打开系统文件夹一看,发现多了很多文件,然后用手机管家 APP 不断地进行清理优化 ,才 ...

  6. android app性能优化大汇总

    这里根据网络上各位大神已经总结的知识内容做一个大汇总,作为记录,方便后续“温故知新”. 性能指标: (1)使用流畅度:  图片处理器每秒刷新的帧数(FPS),可用来指示页面是否平滑的渲染.高的帧率可以 ...

  7. Android开发性能优化总结(一)

    安卓开发应用首先要讲究良好的用户体验,如果一款软件卡顿现象严重,不流畅,经常崩溃,那么将给用户带来极不良好的体验,从而损失用户. 在实际开发和学习中,我总结了一下关于安卓性能的优化,供大家参考交流. ...

  8. Android应用性能优化系列视图篇——隐藏在资源图片中的内存杀手

    图片加载性能优化永远是Android领域中一个无法绕过的话题,经过数年的发展,涌现了很多成熟的图片加载开源库,比如Fresco.Picasso.UIL等等,使得图片加载不再是一个头疼的问题,并且大幅降 ...

  9. (转) Android开发性能优化简介

    作者:贺小令 随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序.以上理由,足以 ...

  10. fir.im Weekly - 如何进行 Android App 性能优化

    关于 Android App 的优化,@anly-jun 用 3 个月完成了这一系列文章,从 性能分析工具 到 ANR .Layout .消除卡顿 到 内存优化.内存分析工具大概十五六篇,并对此做一个 ...

随机推荐

  1. python沉淀之路~~整型的属性

    python的基础知识: 基本数据类型:int   str   list   tuple   dict   bool 一.整型的属性功能 1.工厂方法将字符串转换成整型 a = " b = ...

  2. 常用Kerberos指令

    1. 以超管身份进入kadminkadmin.local addprinc -randkey root/master1@JENKIN.COM   //生成随机key的principal addprin ...

  3. bzoj 1977 [BeiJing2010组队]次小生成树 Tree

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1977 kruscal别忘了先按边权sort.自己觉得那部分处理得还挺好的.(联想到之前某题的 ...

  4. Day2-Python基础2---字符串操作

    一.字符串操作 特性:不可修改 name = "my \tname is {name} and i am {year} old" #首字母大写.capitalize print(n ...

  5. QString 乱谈(1)

    一个月前尝试写了一篇关于QStringLiteral,存盘时MoinMoin罢工了.吸取一点经验,还是写成短篇吧 可是,可是,QString不就是简简单单一个字符串么?能有什么可谈的.真的么... ( ...

  6. java流类、、、理解不够,流太多不知怎么用好?

    总结:输入流.输出流..子类多.需要加强: package com.da; import java.io.*; public class rtr { public static void main(S ...

  7. CSS-MUI:笔记-01

    ylbtech-CSS-MUI:笔记 1. mui-navbar   导航条返回顶部 1.1.样式一 1.2. <div class="mui-navbar-inner mui-bar ...

  8. python startswith与endswith

    如果你要用python匹配字符串的开头或末尾是否包含一个字符串,就可以用startswith,和endswith比如:content = 'ilovepython'如果字符串content以ilove ...

  9. 对runtime的总结:让你会用Runtime

    导语Runtime,简称运行时,就是系统在运行的时候的一些机制,其中最主要的是消息机制,是一套底层的纯C语言的API,我们平时所编写的OC代码,在程序的运行过程中都转成了runtime的代码,平时调方 ...

  10. 部署和调优 3.1 dns安装配置-1

    安装配置DNS服务器 装一个bind,首先搜一下. yum list |grep bind bind.x86_64   我们安装这个 安装 yum install bind.x86_64 -y 看一下 ...