现在的位置: 首页 > 综合 > 正文

Java 5.0 中增强的for循环

2013年09月01日 ⁄ 综合 ⁄ 共 2070字 ⁄ 字号 评论关闭

 

Thread.sleep(1000);

 

System.exit(0);

 

 

以前写遍历是: 
//遍历数组 
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<String> list = new ArrayList<String>(); 
    list.add("Hello "); 
    list.add("Java "); 
    list.add("World!"); 
    String s = ""; 
    for (String temp : list) ...{            
        s += temp; //省去了对强制类型转换步骤 
    } 
    System.out.println(s); 

//上述代码会被编译器转化为: 
void someFunction () ...{ 
    List<String> list = new ArrayList<String>(); 
    list.add("Hello "); 
    list.add("Java "); 
    list.add("World!"); 
    String s = ""; 
    for (Iterator<String> 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循环就有些力不从心了。 

 

抱歉!评论已关闭.