很多时候我们很自然的认为,for循环的时候使用foreach和原来的for循环用下标的方式遍历是相同的。

而且因为foreach循环写法简单,很容易理解,而且少去了很多麻烦的变量,所以估计在学会使用foreach循环之后,很多人就没有用过下标的循环了。

但是你知道两者其实还是有很大区别的,在不同的情况下面应该使用不同的方式去循环。

否则会导致循环的时间变长。数据量小的时候当然没有什么关系,但是一旦数据量大了之后问题就会暴露出来了。

首先我们要知道的时候foreach循环是利用迭代器的使用循环。那么什么是迭代器呢?

提供一种方法访问一个容器对象的各个元素,同时又无需暴露该对象的内部细节,这是设计模式中的一种解释。

for(int i:list)

for(Iterator<Integer> i=list.iterator();i.hasNext();)

上面两种写法意思其实是一样的

其实就是利用了hasNext方法实现了foreach循环

知道了什么是foreach循环,那么什么时候去使用,也就好解释了。

然后需要知道的是什么是RandomAccess接口,ArrayList数组实现了这个接口,这个接口是随机存取接口。

实现了这个接口就表示内部的存放是随机的,但是foreach循环需要需要使用next方法获取下一个元素,而随机存放的话就需要强制建立前后的联系。

所以在循环ArrayList的时候使用下标去循环会比foreach循环要快。

下面说List<>,对于这个链表类似的有很多数据结构,LinkedList什么的,很多,他们存放本身就是有联系的,所以对于他们来说,next方法很容易就找到下一个元素的了,所以循环的时候使用foreach很快。

具体的代码就不贴了,有兴趣的人可以试试大数据量的时候,时间上的差距其实是很明显的。

总结一下,如果一个容器是随机存放的话,使用带有下标的循环,如果不是可以使用foreach循环。

不要偷懒哦。

最新文章

  1. Python框架之Tornado(三)请求
  2. function变量困惑
  3. .NET应用架构设计—适当使用活动记录模式代替领域模型模式
  4. 优化phpstorm运行卡顿问题!
  5. hibernate的数据库乱码问题
  6. ubuntu 工作区中拖动一个窗体到另一个工作区就卡住回不到桌面了
  7. 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:2.搭建环境-2.1创建虚拟机
  8. Spring框架:Spring容器具体解释
  9. java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.String
  10. Avast注册以及更新
  11. eclipse项目显示标尺
  12. pyqt listview基础学习01
  13. c语言,gdb
  14. pureMVC java版搭建流程
  15. vue之router学习笔记
  16. JavaSE| 网络编程
  17. TLB的作用及工作原理
  18. 4-Four-Seeing hands
  19. matlab数组和矩阵
  20. 【IT笔试面试题整理】给定二叉树,给每层生成一个链表

热门文章

  1. mongoDB5--mongoDB增删改查
  2. 监控gc
  3. ios xcode中所有自带的字体如下(最好结合NSMutableAttributedString相结合使用)
  4. 第十五节,基本数据类型,元组tuple
  5. mvc Controller类介绍
  6. 安装 svn
  7. git简单使用教程
  8. Storyboard中拖拽控件不能运行的问题(在运行的时候,相应的控件代码没有被执行)
  9. TransactionScope的使用
  10. SB淘宝api的奇葩问题! 一则服务器无法访问淘宝api