专栏名称: 安卓开发精选
伯乐在线旗下账号,分享安卓应用相关内容,包括:安卓应用开发、设计和动态等。
目录
相关文章推荐
鸿洋  ·  腾讯 ovCompose ... ·  22 小时前  
复利大王  ·  某公募研究员ED? ·  昨天  
复利大王  ·  北京97混血女找男 ·  昨天  
鸿洋  ·  全新导航库 Jetpack ... ·  昨天  
复利大王  ·  三名日本女技师来北京打工被抓 ·  2 天前  
51好读  ›  专栏  ›  安卓开发精选

Android性能优化之被忽视的优化点

安卓开发精选  · 公众号  · android  · 2017-01-14 21:17

正文

请到「今天看啥」查看全文


long end = System.currentTimeMillis();

Log.v("zxy","fori花费:"+(end-start));


start = System.currentTimeMillis();

for (Integer integer : data) {


}

end = System.currentTimeMillis();

Log.v("zxy","foreach花费:"+(end-start));


Iterator iterator = data.iterator();

start = System.currentTimeMillis();

while (iterator.hasNext()){

iterator.next();

}

end = System.currentTimeMillis();

Log.v("zxy","iterator花费:"+(end-start));


11-19 09:11:44.276 1418-1418/? V/zxy: fori花费:30

11-19 09:11:44.380 1418-1418/? V/zxy: foreach花费:105

11-19 09:11:44.476 1418-1418/? V/zxy: iterator花费:95


而通常我们所说的效率高的foreach在遍历上却显得不如意,而fori效率表现的最好,这是因为ArrayList和Vector集合内部实现由数组实现,所以随机访问的速度是很快的,对于可以进行随机访问的List,JDK为它们实现了RandomAccess接口,表示支持快速随机访问。

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


11-19 09:33:23.984 1737-1737/? V/zxy: fori花费:351

11-19 09:33:23.988 1737-1737/? V/zxy: foreach花费:2

11-19 09:33:23.992 1737-1737/? V/zxy: iterator花费:4


则foreach表现最佳,所以对数组、或者实现了RandomAccess接口的List,遍历用fori性能最佳,对LinkedList等以链表实现的集合遍历时使用foreach或者iterator性能最佳,因为foreach的实现就是通过iterator实现的。

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







请到「今天看啥」查看全文