foreach和for循环的区别

1、foreach

foreach依赖IEnumerable接口。

第一次var a in GetList()时调用GetEnumerator()返回第一个对象并赋给a,以后每次再执行 var a in GetList() 的时候仅调用MoveNext,直到循环结束。在循环期间GetList()方法只执行一次。

 1 foreach   (var a in GetList())
 2 {
 3     ...
 4 }
 5
 6 //与下面具有相同功能
 7
 8 var a;
 9 IEnumerator  e  =  GetList().GetEnumerator();
10 while (e.MoveNext)
11 {
12     a = e.Current;
13 }

2、for

for循环靠下标定位,list[3] 相当于 *(list + 3)。

 1 for(int i = 0; i < GetCount(); i++)
 2 {
 3   ....
 4 }
 5
 6 //与下面具有相同功能
 7
 8 int i = 0;
 9
10 while(i < GetCount())
11 {
12   ...
13 }

3、

for循环每次循环会调用GetCount()来比较长度,而foreach不考虑长度,只调用一次GetList()。并且foreach的时候会锁定集合中的对象,期间不能修改。

4、小结

在固定长度或长度不需要计算的时候for循环效率高于foreach。

在不确定长度,或计算长度有性能损耗的时候,用foreach比较方便。

时间: 2024-11-10 13:53:28

foreach和for循环的区别的相关文章

for循环,for…in循环,forEach循环的区别

for循环,for…in循环,forEach循环的区别for循环通关for循环,生成所有的索引下标for(var i = 0 ; i <= arr.length-1 ; i++){ 程序内容 }来执行循环. forEach循环数组.forEach(function(形参1,形参2,形参3){})形参1: 存储的是当前循环次数时,获取的单元数据形参2.储存的是当前循环次数时,获取的单元索引下标形参3.储存的是原始数组三个参数不一定全部定义,看实际项目要求forEach() 只能循环遍历数组,不能循

【JAVA】for,foreach遍历数组时候一些区别

public class ArrayTest { static public void incr(int a[]) { for (Integer i : a) { i += 1; } } static public void incr1(int a[]) { for (int i = 0, len = a.length; i < len; i++) { // a[i] = a[i] + 1; a[i]++; } } static public void main(String args[]) {

关于JSON类的两个用途与for..in和for循环的区别

JSON 这个类的两个用途: 1)将Object 对象,转换成string 类型 var obj = {"a":"1","b":"2","c":"json"}; var a=JSON.stringify(obj);//转换成string对象 2)将字符串 转换Object 对象 var strObj = '{"a":"1","b"

do while 循环和while循环的区别

do while 循环和while循环的区别 1.do while循环是先执行循环体,然后判断循环条件,如果为真,则执行下一步循环,否则终止循环:    while循环是先判断循环条件,如果条件为真则执行循环体: 2.do while循环条件后面必须有一个分号,这个分号表明循环结束.

黑马程序员----java基础---递归概述、递归和循环的区别

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一.递归函数,通俗的说就是函数本身自己调用自己... 如:n!=n(n-1)! 你定义函数f(n)=nf(n-1) 而f(n-1)又是这个定义的函数..这就是递归 定义:程序调用自身的编程技巧称为递归( recursion). 递归做为一种算法在程序设计语言中广泛应用. 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小

递归与循环的区别

递归与循环是两种不同的解决问题的典型思路. 递归算法: 优点:代码简洁.清晰,并且容易验证正确性.(如果你真的理解了算法的话,否则你更晕) 缺点:它的运行需要较多次数的函数调用,如果调用层数比较深,需要增加额外的堆栈处理,比如参数传递需要压栈等操作,会对执行效率有一定影响.但是,对于某些问题,如果不使用递归,那将是极端难看的代码. 循环算法: 优点:速度快,结构简单. 缺点:并不能解决所有的问题.有的问题适合使用递归而不是循环.如果使用循环并不困难的话,最好使用循环. 递归算法 和循环算法总结

python中生成器对象和return 还有循环的区别

python中生成器对象和return 还有循环的区别 在python中存在这么一个关键字yield,这个关键字在项目中经常被用到,比如我写一个函数不想它只返回一次就结束那我们就不能用return,因为return后面就不能跟任何东西,意味着函数的结束.那么我们完全可以这么做: def main(): for i in range(1,100): yield i 这样就等于生成了一个循环返回对象,特别在爬虫scrapy中较为常见!yeild和return还有for 上本质有什么区别呢?其实很简单

12、三种循环的区别、死循环

12.1 三种循环的区别 三种循环的区别: 1.如果条件判断从来没有满足过,那么for循环和while循环将会执行0次,但是do-while循环会执行至少一次. 2.for循环的变量在小括号当中定义,只有循环内部才可以使用.while循环和do- while初始化语句本来就在外面,所以出来循环之后还可以继续使用. 循环之间可以嵌套使用 12.2 死循环 永远停不下来的循环,叫做死循环 原文地址:https://www.cnblogs.com/koss/p/12283409.html

粗略总结for循环与foreach()循环区别

for循环和foreach循环其实可以算得上是从属关系的,即foreach循环是可以转化成for循环,但是for循环不一定能转换成foreach循环. 下面简单介绍一下两种循环: 1.for循环 代码格式: for(表达式1;循环条件;表达式2) { 循环体 } 代码含义: 首先运行表达式1; 然后判断条件是否为真,如果为真,则执行循环体,执行完后再运行表达式2: 接着再判断循环条件--直到循环条件为假才会结束循环. 注意事项: 表达式1:可以是任何代码,一定会执行且只会执行一次: 表达式2:可