作者:刘颖
在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循环哪个执行效率更高! |