增强的for循环

 

  作者:刘颖

  在J2SE5.0之前,如果你想依次读取一个数组中的内容,我想大部分人会采用以下这种方法:
    int[] arr=new int[5];
   for(int i=0;i<5;i++)
     arr[i]=i+1;//给数组中各元素赋值
   for(int j=0;j<arr.length;j++
     System.out.println(arr[j]);

  但是在J2SE5.0之后,您完全可以采用另外一种方法,即增强的for循环(Enhanced for loop).那么上面的这个程序,我们可以用它来实现即是:
   int[] arr=new int[5];
   for(int i=0;i<5;i++)
     arr[i]=i+1;//给数组中各元素赋值
   for(int a:arr)
     System.out.println(a);

  在增强的for循环中,我们不需要去检查数组的边界,不必担心数组下标越界,这些都由增强的for循环替我们代劳了.那么增强的for循环的语法格式是什么样子的呢?如下所示:
   for(type element:array )
   {
     System.out.println(element)…}

  这里有一点值得一提,就是element的类型一定要和array数组的元素的类型保持一致.我想这一点不用我太费口舌,因为在array数组中取出每一个元素后,要存在element中,所以,两者的类型一定要保持一致喽!

  如果是对象数组的话,做法也是大同小异,你只要保持element的类型和array数组中的元素类型一致就可以了.
  public class Foreach {
      public static void main(String[] args){

         Book[] book=new Book[5];
         book[0]=new Book("操作系统");
         book[1]=new Book("数据结构");
         book[2]=new Book("编译原理");
         book[3]=new Book("C语言");
         book[4]=new Book("数据库原理");
         
          for(Book b:book)
            {
               System.out.println(b.getName());
              }
       }
     }
   class Book{
      private String name;
      public Book(){}
      public Book(String name)
         {
           this.name=name;
          }
      public String getName()
         {
           return this.name;
          }
     }

  对于二维数组,我们可以把二维数组当成一个元素为一维数组的数组,这样就很容易实现对它的访问了.
  int[][] arr={{1,2,3},
         {4,5,6},
         {7,8,9}};
  for(int[] row:arr)
    {
      for(int element:row)
        {
          System.out.println(element);
        }
    }

  这里,我还想唠叨一句,foreach是C#中的关键词,在java中,我们称之为增强的for循环.

  有人曾在
     硬件环境: PIII800 + CPU456
     软件环境: VisualStudio.Net + C#
   这样的环境下测试过for和foreach的功能,结果显示通过对测试结果的分析,可以看出相对于原来的for语句foreach具有更好的执行效率,foreach的平均花费时间只有for30%。在测试同时附加的发现,用for写入数据时间大约是读取数据时间的10倍左右. 我并没有用java的环境下过做过这样的测试,在这里引用这个测试,权当给大家一点提示,有兴趣的可以做一个测试,测试一下在java环境下,for循环和增强的for循环哪个执行效率更高!