黑马程序员技术交流社区
标题:
增强for循环抛出异常问题
[打印本页]
作者:
黄锋
时间:
2011-9-19 21:57
标题:
增强for循环抛出异常问题
List<String> list=new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
for(String s : list){
if(s=="b"){
list.remove(s);
}
}
运行这段代码时候抛出了异常,难道增强for循环,只能支持对集合或者数组遍历吗?
作者:
匿名
时间:
2011-9-19 22:15
增强for循环是1.5JDK的新特性,使用的也是跌代
为了确保迭代的顺利推进,必须符合的条件是被迭代的对象的结构不变
原因就是list在调用remove方法的时候list结构被改变了.
正确的做法如下:
Iterator<String> i=list.iterator();
while(i.hasNext()){
String s=i.next();
if(s.equals("1")){
i.remove();
}else{
System.out.println(s);
}
}
也就是创建一个迭代器,使用迭代器内置的remove方法
作者:
匿名
时间:
2011-9-19 23:00
标题:
EnhancedFor
验证了下 这段代码没有异常[code]import java.util.*;
public classTestFor {
public static void main(String[] args) {
List<String> list=new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
for(String s : list){
if(s=="b"){
list.remove(s);
}
System.out.println(s);
}
}
}[/code]增强的For循环支持数组和集合类,但是增强的For循环有几个缺陷:
1、在数组中不能方便的访问下标值。
2、在集合中与使用Iterator相比,不能方便的删除集合中的内容。
[b]用其他的方式遍历,可以考虑用容器本身的remove方法,但是因为增强For循环内部调用的也是Iterator,所以和Iterator一样,也是把容器锁定,所以只能调用Iterator的remove方法。[/b]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2