JDK1.5中增加了增强的for循环。
缺点:
对于数组,不能方便的访问下标值;
对于集合,与使用Interator相比,不能方便的删除集合中的内容(在内部也是调用Interator).
除了简单遍历并读取其中的内容外,不建议使用增强的for循环。
一、遍历数组
语法为:
for (Type value : array) { expression value; }
//以前我们这样写:
void someFunction () { int[] array = {1,2,5,8,9}; int total = 0; for (int i = 0; i < array.length; i++) { total += array[i]; } System.out.println(total); }
//现在我们只需这样写(和以上写法是等价的):
void someFunction () { int[] array = {1,2,5,8,9}; int total = 0; for (int n : array) { total += n; } System.out.println(total); }
这种写法的缺点:
显而易见,for/in(for each)循环自动控制一次遍历数组中的每一个元素,然后将它赋值给一个临时变量(如上述代码中的int n),然后在循环体中可直接对此临时变量进行操作。这种循环的缺点是:
1. 只能顺次遍历所有元素,无法实现较为复杂的循环,如在某些条件下需要后退到之前遍历过的某个元素;
2. 循环变量(i)不可见,如果想知道当前遍历到数组的第几个元素,只能这样写:
int i = 0; for (int n : array) { System.out.println("This " + i + "-th element in the array is " + n); i++; }
二、遍历集合
语法为:
for (Type value : Iterable) { expression value; }
注意:for/in循环遍历的集合必须是实现Iterable接口的。
1 //以前我们这样写: 2 void someFunction () 3 { 4 List list = new ArrayList(); 5 list.add("Hello "); 6 list.add("Java "); 7 list.add("World!"); 8 String s = ""; 9 for (Iterator iter = list.iterator(); iter.hasNext();) 10 { 11 String temp= (String) iter.next(); 12 s += temp; 13 } 14 System.out.println(s); 15 }
1 //现在我们这样写: 2 3 void someFunction () 4 { 5 List list = new ArrayList(); 6 list.add("Hello "); 7 list.add("Java "); 8 list.add("World!"); 9 String s = ""; 10 for (Object o : list) 11 { 12 String temp = (String) o; 13 s += temp; 14 } 15 System.out.println(s); 16 }
1 // 如果结合“泛型”,那么写法会更简单,如下: 2 void someFunction () 3 { 4 List list = new ArrayList(); 5 list.add("Hello "); 6 list.add("Java "); 7 list.add("World!"); 8 String s = ""; 9 for (String temp : list) 10 { 11 s += temp; //省去了对强制类型转换步骤 12 } 13 System.out.println(s); 14 } 15 //上述代码会被编译器转化为: 16 void someFunction () 17 { 18 List list = new ArrayList(); 19 list.add("Hello "); 20 list.add("Java "); 21 list.add("World!"); 22 String s = ""; 23 for (Iterator iter = list.iterator(); iter.hasNext(); ) 24 { 25 String temp = iter.next(); 26 s += temp; 27 } 28 System.out.println(s); 29 }
这种写法的缺点:
虽然对集合进行的for/in操作会被编译器转化为Iterator操作,但是使用for/in时,Iterator是不可见的,所以如果需要调用Iterator.remove()方法,或其他一些操作, for/in循环就有些力不从心了。 综上所述,Java 5.0中提供的增强的for循环——for/in(for each)循环能让我们的代码更加简洁,让程序员使用时更加方便,但是也有它的局限性,所以一定要根据实际需要有选择性地使用,不要盲目追求所谓的“新特性”。
本文转自SummerChill博客园博客,原文链接:http://www.cnblogs.com/DreamDrive/archive/2011/11/15/3917138.html,如需转载请自行联系原作者