Java 5.0 中增强的for循环

 

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循环就有些力不从心了。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值