Java中的for和foreach

转自:http://www.cnblogs.com/Terry-greener/archive/2011/10/27/2226179.html

foreach   (var a in GetList())
{
    ...
}

=

var a;
IEnumerator  e  =  GetList().GetEnumerator();
while (e.MoveNext)
{
    a = e.Current;
}

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

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

for(int i = 0; i < GetCount(); i++)
{
  ....
}

=

int i = 0;

while(i < GetCount())
{
  ...
}

总结

  1. 在固定长度或长度不需要计算的时候for循环效率高于foreach.
  2. 在不确定长度,或计算长度有性能损耗的时候,用foreach比较方便
  3. 并且foreach的时候会锁定集合中的对象.期间不能修改.

另外一种说法:

  1. 对于数组的访问,是应该使用for的方式的,因为这样性能更高
  2. 由于Enumerator中,做了版本检查处理的工作,所以使用foreach是线程安全
  3. 对本地变量,则使用for,效率和安全兼顾
  4. 在一些全局的,多线程可以访问的数据结构对象,使用foreach
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值