ArrayList的for遍历和下标遍历的效率分析

因为List是有下标的,所以遍历的时候可以用增强for循环也可以用下标来遍历,那么这两个方式到底哪个效率更高呢?我们来假设一个模型,我们要计算一个380万条成绩的数据,我们放在ArrayList里面,然后再用遍历取值相加除以总数(当然sql语句有函数可以直接得出,这里为了测试方便,用java来实现),下面请看测试的程序。

ArrayList的for遍历和下标遍历的效率分析

程序比较简单这里就不介绍了,得出增强for循环遍历取平均的时间为21ms,下面看看下标遍历的时间。

ArrayList的for遍历和下标遍历的效率分析

可以看到这边仅仅是取值出来相加的运算就相差了9ms,那么这是为什么呢?

因为ArrayList实现了RandomAccess接口(随机存取接口),这也就标志着ArrayList是一个可以随机存取的列表。在java中,RandomAccess和Cloneable、Serializable一样,都是标志性接口,不需要任何实现,只是用来表明其实现类具有某种特性,实现了Cloneable表示这个类可以被拷贝,而实现了Serializable接口表明被序列化,同理实现了RandomAccess则表明这个类可以随机存取,对ArrayList来说也就标志着数据元素之间没有关联,即两个位置相邻的元素之间没有相互依赖或者索引的关系,可以随机的访问和存储。

而在java中的增强for循环是迭代器的变形用法,也就是可以用for(Iterator<Integer> i=list.iterator;i.hasNext();){sum+=i.next();}。也就是说在这边为了使用迭代器,需要强制建立一种相互联系的关系,比如上一个元素可以判断是否有下一个元素,以及下一个元素是什么等关系,所以在这边就是用增强for循环耗时的原因了。

所以我们在遍历ArrayList的时候,可以选择下标遍历的方式会更高效一点~~~。

转载于:https://my.oschina.net/u/2391658/blog/861746

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值