彩票走势图

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                    while

  第一组比较(4次)

  1313 &nbsp;                1329                       1219

  1266                  1063   &nbsp;                   1156

  1078 &nbsp;                1109                       1125

  1297                  1047                &nbsp; &nbsp;    1266

  总时间

  4954            &nbsp;     4548                       4766

  第二组比较

  1219                  1125      &nbsp;     &nbsp;          1109

  1172                  1062      &nbsp;                1188

  1313             &nbsp;    1109                       1125

  1125                  1296         &nbsp;             1125

  总时间

  4829               ;   4592    &nbsp;                  4547

  第三组比较

  1265&nbsp;                 1078                       1125

  1062                  1062        &nbsp;&nbsp;             1094

  1328                  1109                  ;   &nbsp; 1094

  1329   &nbsp;              1235                       1125

  总时间

  4984                  4484       &nbsp;               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; &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;      &nbsp;    编译后

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

  test eax,eax

  je foo+23h

  jmp foo+18h

  编译前              编译后

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

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

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


标签:

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

文章转载自:网络转载

为你推荐

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


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP