JAVA中for each in_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 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循环就有些力不从心了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值