黑马程序员技术交流社区

标题: 增强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