很多时候我们很自然的认为,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循环。

不要偷懒哦。

我也是一个刚出来不久的程序员,说的有什么错误,请在评论下方,说出来

更多学习资料

什么时候用for循环,什么时候用foreach相关推荐

  1. c#foreach循环_C#| 使用foreach循环打印整数数组

    c#foreach循环 Given an integer array and we have to print its elements using "foreach loop" ...

  2. java for in 循环_js的for in循环和java里foreach循环的区别分析

    本文实例分析了js的for in循环和java里foreach循环的区别.分享给大家供大家参考.具体分析如下: js里的for in循环定义如下: for(var variable in obj) { ...

  3. c foreach循环_C ++中的foreach循环

    c foreach循环 介绍 (Introduction) The foreach loop in C++ or more specifically, range-based for loop was ...

  4. for循环遍历数组和foreach遍历数组

    for循环和foreach循环都可以遍历整个数组,但什么时候使用for循环什么时候使用foreach循环? 如果知道数组的个数就用for循环,因为for循环用到了数组的索引值,而foreach中没有用 ...

  5. js循环(for/for in/forEach/map/for of)详解

    1. 基础循环 for for (var i = 0; i < list.length; i++) {//循环体 } 复制代码 最基础的循环也有优化的空间:整个循环中数组的长度是不会改变的 fo ...

  6. jmeter根据循环获取参数_jmeter forEach循环获取response参数值进行接口请求

    jmeter forEach循环获取response参数值进行接口请求 注意: 一,ForEach控制器 输入变量前缀:输入正则表达式变量的引用名称即可 Start index for loop(ex ...

  7. tp5循环查询语句_tp5 foreach 套循环的优化(就是foreach 里边再查表)

    优化建议: 1.不要foreach里边再查询表,因为循环多次查表会很占资源的 2.没有办法就关联表查询join 例子: 原写法: $rsdo=Db::name('order')->field(' ...

  8. js 循环拆词_javascript forEach通用循环遍历方法

    循环遍历一个元素是开发中最常见的需求之一,那么让我们来看一个由框架BASE2和Jquery的结合版本吧. 上一次的错误太多,排版也出现了问题,重写了一遍,希望大家支持. 循环遍历一个元素是开发中最常见 ...

  9. java for循环 等待_在forEach循环中使用异步/等待

    在forEach循环中使用async / await是否有任何问题? 我正在尝试遍历文件数组并await每个文件的内容. import fs from 'fs-promise' async funct ...

  10. js循环方法之 for forEach each map

    前端开发 少不了使用 js循环. 循环方法太多了 ,选择一多就让选择困难症的人头疼 .用的最多的就是for和foreach ,但一直搞不懂就说为什么要用它而不用它 ,就查查资料总结记录下,希望以后再也 ...

最新文章

  1. 如何理解遗传算法中的编码与解码?以二进制编码为例
  2. vscode的 jsonp 配置文件
  3. 生产消费是什么设计模式_快速消费品的完整形式是什么?
  4. 数据合并计算php,各位大神,求助如果用VBA实现以下数据合并以及数量计算
  5. laravel log 对象_swoole运行模式加速laravel应用的详细介绍(life)
  6. 客户的价值源于客户的流程
  7. 机顶盒固件简单做刷机包方法
  8. LocalDate获取每周第一天
  9. 给函数取一个“好”的名字
  10. Webots学习笔记—距离传感器的介绍和四轮小车的避障
  11. mysql 1308_MySQL恢复数据报ERROR 1308 : LEAVE with no matching label
  12. 你不知道的水浒好汉,在这里!
  13. 学生学籍管理系统数据流图
  14. 大明 VS 满清,明朝的十次机会
  15. 带属性随机游走的图循环网络
  16. 网站刷关键词_如何提升网站关键词及长尾词的排名 - 百度排名提升软件
  17. 戏说Android四大组件之ContentProvider
  18. 《Adobe Fireworks CS6中文版经典教程》——1.6复习
  19. GPU在AI业务中的核心技术与应用
  20. 电力电子技术复习笔记2

热门文章

  1. NVIDIA AGX Xavier 部署 CUDA-PointPillars
  2. os.path.expanduser
  3. python面向对象语言_python是面向对象的语言吗
  4. 百度主动推送,百度收录,百度sitemap.xml的标准格式...
  5. Not quite a no-op; ensures volatile write semantics
  6. 速度提升80% 360手机浏览器推G5内核版
  7. 警车持枪闯收费站 手枪抵工作人员头部威胁(附监控录像图)
  8. 微信小程序学习笔记(一)入门
  9. 教育期刊《亚太教育》简介及投稿须知
  10. PHPExcel数据导出