彩票走势图

java中for foreach while循环的比较

转帖|其它|编辑:郝浩|2010-11-04 17:26:38.000|阅读 1795 次

概述:本文主要讲解java中for foreach while循环的比较,希望对大家有帮助。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

  在java中究竟是一般的for循环,还是for的增强型foreach,或是while的执行效率比较快呢,我用了一个简单的程序来分析3种循环

  public static void main(String[] args) {

  List<Integer> map = new ArrayList<Integer>();

  for (int i = 0; i < 100000; i++) {

  map.add(i);

  }

  long currTime = System.currentTimeMillis();

  //基本的for

  int z = map.size();

  // for (int i = 0; i < z; i++) {

  // int tmp = map.get(i);

  // System.out.println(tmp);

  // }

  //foreach

  // for (Integer integer : map) {

  // int tmp = integer;

  // System.out.println(tmp);

  // }

  //while

  // int i = 0 ;

  // while(i<z){

  // int tmp = map.get(i);

  // System.out.println(tmp);

  // i++;

  // }

  //

  // long time = System.currentTimeMillis() - currTime ;

  // System.out.println(time);

  //

  // }

  下面是3种循环得出的数据(时间单位为毫秒)

  for     &nbsp;             foreach                    while

  第一组比较(4次)

  1313                  1329      &nbsp;          ;      1219

  1266                  1063                       1156

  1078                  1109     &nbsp;                 1125

  1297&nbsp;                 1047                 &nbsp;     1266

  总时间

  4954 &nbsp;                4548                       4766

  第二组比较

  1219                  1125  ;                     1109

  1172                  1062                     &nbsp; 1188

  1313       &nbsp;          1109                       1125

  1125                  1296             &nbsp;       &nbsp; 1125

  总时间

  4829         ;         4592     &nbsp;                 4547

  第三组比较

  1265                  1078                       1125

  1062                  1062         &nbsp;             1094

  1328                  1109                       1094

  1329                  1235 &nbsp;              ;       1125

  总时间

  4984            &nbsp;     4484                       4438

  从上面的数据我们可以看出foreach和while的效率几乎是差不多的,而for则相对较慢一些。

  这是不是代表着foreach可以替代掉for呢,显然不是foreach的内部原理其实还是 Iterator

  但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove();更不能使用下标来方便的访问元素.

  foreach这种循环一般只适合做数组的遍历,提取数据显示等,不适合用于增加删除和使用下标等复杂的操作.

  用一个最简单的程序来说明用foreach来进行赋值操作造成的错误.

  public class test {

  public static void main(String[] args)

  {

  User[] users = new User[2];

  users[0] = new User();

  users[1] = new User();

  //     &nbsp;    for(int i=0; i<users.length; i++)

  //     &nbsp;    {

  //              users[i] = new User();

  //    ;      }

  for(User user:users)

  {

  user = new User();

  }

  System.out.println(users[0].name);

  }

  }

  class User

  {

  String name = "nick";

  }

  第一种for循环可以正常的赋值,而第二种foreach就会报出空指针.

  for循环和while循环在使用上有一定的差异,但从实现的效果来看都是基本一样的。

  for循环再某些方面要更优一些如无限循环 while(true) for(;;)

  编译前              编译后

  while (1);   &nbsp;    mov eax,1

  test eax,eax

  je foo+23h

  jmp foo+18h

  编译前              编译后

  for (;;);     &nbsp;    jmp foo+23h

  从编译后的结果我们可以看出for的指令少,而且没有判断,显然更快.

  到底最好最差呢,其实都是相对的,根据不同的情况找到最优的解决才是最好的.


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@capbkgr.cn

文章转载自:网络转载

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP