彩票走势图

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                   foreach &nbsp;       &nbsp;          while

  第一组比较(4次)

  1313                  1329              &nbsp;        1219

  1266              ;    1063                       1156

  1078              &nbsp;   1109          &nbsp;            1125

  1297    ;              1047                   ;    1266

  总时间

  4954  &nbsp;               4548                       4766

  第二组比较

  1219           &nbsp;      1125                       1109

  1172                  1062            ; &nbsp;         1188

  1313   &nbsp;            &nbsp; 1109                       1125

  1125            &nbsp;     1296  &nbsp;                    1125

  总时间

  4829    &nbsp;             4592                       4547

  第三组比较

  1265            &nbsp;     1078                       1125

  1062                ;  1062                       1094

  1328       &nbsp;          1109                       1094

  1329    &nbsp;     &nbsp;       1235                       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();

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

  //  &nbsp;       {

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

  // &nbsp;        }

  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(;;)

  编译前 &nbsp;            编译后

  while (1);        mov eax,1

  test eax,eax

  je foo+23h

  jmp foo+18h

  编译前       ;       编译后

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

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

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


标签:

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

文章转载自:网络转载

为你推荐

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


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP