A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 寇弘禄 于 2013-3-12 10:10 编辑
  1. List<Object> list = new LinkedList<Object>();
  2.                 list.add(5);
  3.                 list.add("aa");
  4.                 list.add(2.56);
  5.                 list.add(6);
  6.                 list.add(9);
  7.                 for(Object inte : list){    //这里报个ConcurrentModificationException异常。
  8.                         if(inte.equals("aa"))
  9.                                 list.remove(0);   
  10.                         System.out.println(inte);
  11.                 }
  12.                 System.out.println(list);

  13.                 for(int i=0;i<list.size();i++){
  14.                         if(list.get(i).equals("aa"))
  15.                                 list.remove("aa");
  16.                         System.out.println(list.get(i));
  17.                 }
  18.                 System.out.println(list);
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

4 个回复

倒序浏览
增强的Foreach循环和Iterator一样,在遍历集合的时候都不能修改集合,否则都会引发ConcurrentModificationException
回复 使用道具 举报
  • for(Object inte : list){  
  •     if(inte.equals("aa"))
  •     list.remove(0);
  •     System.out.println(inte);
  • }
增强for中的这个list是被操作的对象,遍历时,当他获得一个元素的时候,指针已经指向下一个元素,跟Iterator的原理是一样的,
当你准备开始遍历的时候,其实取得元素顺序就已经是确定的了,如果获得到一半时你增删被遍历的对象势必会打乱
原有的顺序,这是不允许的. 但是修改的操作还是可以的

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
高级for循环在对集合进行遍历时,只能获取集合中的元素,不能对集合进行操作的。
如果需要删除对象可以选择Iterator中的自有方法remove()来进行删除。
或者你可以先将要删除的元素用另一个list装起来,等遍历结束再remove掉
可以这样写
List delList = new ArrayList();//用来装需要删除的元素
for(Object inte : list)
        if(inte.equals("aa")){
                n++;
                delList.add(inte);
}
list.removeAll(delList);//遍历完成后执行删除

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
增强for循环对集合进行遍历,只能获取元素,但是不能对集合进行操作
迭代器除了遍历,还可以进行remove集合中元素的动作。
如果使用ListIterator,还可以再遍历过程中对集合进行增删改查的动作

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马