黑马程序员技术交流社区

标题: 使用高级for循环怎样解决List集合删除元素存在的异常 [打印本页]

作者: wyy666    时间: 2014-6-8 18:51
标题: 使用高级for循环怎样解决List集合删除元素存在的异常
ackage com.itheima;
import java.util.ArrayList;
import java.util.List;
/*
* 第2题:一个ArrayList对象aList中存有若干个字符串元素,
* 现欲遍历该ArrayList对象,删除其中所有值为"abc"的字符串元素,
* 请用代码实现。*/
public class Test2 {
public static void main(String[] args) {
  // TODO Auto-generated method stub
  
      List<String> alist=new ArrayList<String>();
      alist.add("abc");
      alist.add("abd");
      alist.add("abe");
      alist.add("abc");
      alist.add("abc");
      alist.add("cba");
      //System.out.println(alist);
      
     for(Object element:alist){
       if("abc".equals(element)){
        alist.remove(element);
       }
      }
      System.out.println(alist);
}
}
/*Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at com.itheima.Test2.main(Test2.java:28)*/


作者: 丁绍然    时间: 2014-6-8 19:47
本帖最后由 丁绍然 于 2014-6-8 19:55 编辑

貌似这个不能用foreach
        for(int x=0; x<al.size(); x++){  
            if("abc".equals(al.get(x))){  
                al.remove(x);  
                x--;  
            }我明白了,equals没问题,就是remove不行,因为element不是list里面的元素了。。是移除不了的

作者: 谭荣强    时间: 2014-6-8 22:12
高级for相当于迭代器,唯一的区别就是:它可以删除元素。
你别想了
作者: 松涛小玮    时间: 2014-6-8 22:13
list集合想删除 只能用迭代器来操作 或者用list特有的迭代器 还能增加和修改
作者: Kris    时间: 2015-11-16 21:37
还可以用ListIterator迭代器来做,不过是迭代器本身的删除功能与集合无关。
作者: 彼岸花开    时间: 2016-3-18 00:00
谢谢你得分享,真的太赞了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2