采摘处:http://rujingzhang.iteye.com/blog/173998
以前写遍历是:
//遍历数组
for(int i = 0; i < array.length; i ++) ...{
int n = array[i];
//do something
}
//遍历集合
for(Interator iter = list.iterator(); iter.hasNext(); ) ...{
Object o = iter.next();
//do something
}
现在使用增强型的:
遍历数组:
//以前我们这样写:
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)不可见,如想知道当前遍历到数组的第几个元素。 遍历集合: //以前我们这样写: void someFunction () ...{ List list = new ArrayList(); list.add("Hello "); list.add("Java "); list.add("World!"); String s = ""; for (Iterator iter = list.iterator(); iter.hasNext();) ...{ String temp= (String) iter.next(); s += temp; } System.out.println(s); } //现在我们这样写: void someFunction () ...{ List list = new ArrayList(); list.add("Hello "); list.add("Java "); list.add("World!"); String s = ""; for (Object o : list) ...{ String temp = (String) o; s += temp; } System.out.println(s); } // 如果结合“泛型”,那么写法会更简单,如下: void someFunction () ...{ List list = new ArrayList(); list.add("Hello "); list.add("Java "); list.add("World!"); String s = ""; for (String temp : list) ...{ s += temp; //省去了对强制类型转换步骤 } System.out.println(s); } //上述代码会被编译器转化为: void someFunction () ...{ List list = new ArrayList(); list.add("Hello "); list.add("Java "); list.add("World!"); String s = ""; for (Iterator iter = list.iterator(); iter.hasNext(); ) ...{ String temp = iter.next(); s += temp; } System.out.println(s); } 这种写法的缺点: 虽然对集合进行的for/in操作会被编译器转化为Iterator操作,但是使用for/in时,Iterator是不可见的,所以如果需要调用Iterator.remove()方法,或其他一些操作, for/in循环就有些力不从心了。