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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘学 中级黑马   /  2012-9-4 09:13  /  5811 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  
  List list = new ArrayList();
  list.add("333");
  list.add("555");
  list.add("666");
  list.add("888");
  int i=0;
  for ( Object obj : list) {  
      
      if (obj.equals("333")) {  
            
          list.remove(obj);
     }  
      System.out.println(list.get(i)+ " ");  
      i++;
  }

红色部分为什么会出错,为什么在foreach中删除集合中元素不可以,使用的是 list集合中的remove方法怎么不对呢?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 这样的细节以后要多注意哦,多多加油.

查看全部评分

6 个回复

倒序浏览
高级for循环使用要注意:可以进行查询、修改,但是不能进行增加和删除。所以不管你是遍历List也好,还是遍历数组也好,你进行删除操作都会出错的。
回复 使用道具 举报
本帖最后由 黑马王建伟 于 2012-9-4 09:46 编辑

此增强for循环对集合进行遍历,可以获取集合元素,可以修改元素,但不能对集合进行增删操作;
迭代器除了遍历,还可以进行rimove集合中元素的操作;
如果用ListIterator,可以对集合进行增删改查的操作。
回复 使用道具 举报
你把remove放进高级for循环中了,所以无法执行
回复 使用道具 举报
不能在高级for循环中进行对数组,结合的增删操作,因为增删在不断的修改集合或者数组的长度,这是一个陷阱,很容易造成数组越界(特别是在删除的时候),比如原来集合大小为3,你删除一个,变为2了,此时for会继续遍历第三个元素,就会造成越界。
一般使用迭代器来进行遍历过程中的增删操作。迭代器在工作时会不断的判断是否还有元素可以被迭代。保证了安全性。

评分

参与人数 1技术分 +1 收起 理由
田建 + 1

查看全部评分

回复 使用道具 举报
高级for:foreach(): 只可以遍历数组 和Collection集合。
格式是:foreach(变量名,数组或者Collection集合){
}
这个高级for 只是可以做单纯的遍历集合,不可以有增删的动作。
回复 使用道具 举报
明白了  ,已解决,谢谢大家
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马