for循环与foreach的区别

foreach 依赖 IEnumerable.

第一次 var a in GetList() 时 调用 GetEnumerator 返回第一个对象 并 赋给a,

以后每次再执行 var a in GetList() 的时候 调用 MoveNext.直到循环结束.

期间GetList()方法只执行一次.


1

2

3

4

5

6

7

8

9

10

11

12

13

foreach   (var a in GetList())

{

    ...

}

=

var a;

IEnumerator  e  =  GetList().GetEnumerator();

while (e.MoveNext)

{

    a = e.Current;

}

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


1

2

3

4

5

6

7

8

9

10

11

12

13

for(int i = 0; i < GetCount(); i++)

{

  ....

}

=

int i = 0;

while(i < GetCount())

{

  ...

}

  

or 循环每次循环会调用 GetCount() 来比较长度. 而 foreach 不考虑长度,只调用一次GetList().

结论.

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

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

并且foreach的时候会锁定集合中的对象.期间不能修改.

时间: 2024-10-11 10:41:54

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

php中for循环与foreach循环效率比较

昨日晚上,在不经意间听到别人说php中for循环效率比foreach高,尽量多用for循环可以提高php效率. 听到这个论调,我当时一愣,for每次循环前都要进行判断,而foreach只需在数组内部移动指针,for的效率会比foreach要高? ------------------- 今天特地写了个简单的脚本做了测试(以下结果皆采用多次测试后的平均值) $max = 100000; $arr = range(0,$max); $t1 = microtime(true); for($i = 0;$

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

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

for循环与foreach

注意点: for循环时,可以对集合进行操作,但foreach循环中,对集合进行操作会报错:                  for 循环可以获取下标 如下代码: package com.tt; import java.util.ArrayList;import java.util.List;import java.util.Objects; public class TextMain { public static void main(String[] args) {      List<St

for循环与forEach性能思考

今日看到一句话: 基于循环的迭代比基于函数的迭代法快8倍,因此有了该篇验证博客. 验证代码如图: 验证结果:在数量比较少的时候,无明显差别,当数量级达到10的4次方时候,for循环的效率优势明显. 从中学到其他小知识点: 1.es6语法 数组fill,填充数组,注意,如果填充的是对象,则只是一个指针.所有的都一样. 2.console.time和console.timeEnd 原文地址:https://www.cnblogs.com/yadiblogs/p/9326839.html

for循环与for in,$(&#39;&#39;).each 与$.each的区别

一:for循环与for in的区别 for...in 语句用于对数组或者对象的属性进行循环操作. 语法: for (变量 in 对象){    在此执行代码} for循环是对数组的元素进行循环,而不能引用于非数组对象(类数组对象也可以遍历). 语法: for(int 变量初始值;条件;递增或递减){    在此执行代码} 用for in遍历window对象的属性. for(var prop in window){ console.log(winodw[prop ]) } 用for inb遍历数组

简析Java中while循环与do/while循环的区别

while语法格式:while(布尔表达式){ //语句}先判断布尔表达式,如果为true就会执行循环体中的语句,然后再判断布尔表达式,如果为true就执行循环体中的语句,一直到布尔表达式为false,然后循环结束.通常用算术运算符(++ -- 累减) do/while语法格式:do{//语句}while(布尔表达式);先执行一次循环体,然后在判断布尔表达式是不是true,如果是就继续执行循环体,在判断布尔表达式,直到为false就结束循环.两者的区别:while是先判断在执行如果判断不成立,就

【C语言天天练(一)】while(1)死循环与for(;;)死循环的区别

http://www.kyxsw.com/xiaoshuo/32321/5447632.html http://www.kyxsw.com/xiaoshuo/32321/5447633.html http://www.kyxsw.com/xiaoshuo/32321/5447634.html http://www.kyxsw.com/xiaoshuo/32321/5447635.html http://www.kyxsw.com/xiaoshuo/32321/5447636.html http:

.NET for 和 foreach的区别

我们知道If,Else,For,While,Switch,变量等等都是面向过程中的基础知识,本篇文章主要就讲讲.NET 中For和Foreach之间的区别: -- For循环主要是有条件地进行遍历数据并筛选符合条件的数据. -- Foreach循环主要是一次性地遍历数据. 注:两种循环方式有好有坏,在不同的场景采用不同的循环方式,因人而异. 以下就简单列举个例子解析两种循环的差异: //主要的运行环境是VS2010,以控制台为例. //For循环的例子 //定义字符串数组 string[] st

C#基础之------for与foreach的区别

我们在数组的遍历中通常用到for循环. 例子: // for语句的遍历输出使用1 string [] names={"熊猫","狐狸","美人鱼"}; 2 3 for(int i=0;i<names.Length;i++) 4 { 5 string s1=names[i]; 6 Console.WritleLine(str); 7 } 8 9 Console.ReadKey(); 在C#里面还有另外一种遍历循环输出方法:foreach fo