Java 5.0 中增强的for循环——for/in (for each)

采摘处: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<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、付费专栏及课程。

余额充值