黑马程序员技术交流社区

标题: foreach循环遍历list集合 [打印本页]

作者: 刘学    时间: 2012-9-4 09:13
标题: foreach循环遍历list集合

  
  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方法怎么不对呢?
作者: 邓超军    时间: 2012-9-4 09:21
高级for循环使用要注意:可以进行查询、修改,但是不能进行增加和删除。所以不管你是遍历List也好,还是遍历数组也好,你进行删除操作都会出错的。
作者: 黑马王建伟    时间: 2012-9-4 09:39
本帖最后由 黑马王建伟 于 2012-9-4 09:46 编辑

此增强for循环对集合进行遍历,可以获取集合元素,可以修改元素,但不能对集合进行增删操作;
迭代器除了遍历,还可以进行rimove集合中元素的操作;
如果用ListIterator,可以对集合进行增删改查的操作。

作者: 杨卓儒    时间: 2012-9-4 10:13
你把remove放进高级for循环中了,所以无法执行
作者: 舒远    时间: 2012-9-4 11:23
不能在高级for循环中进行对数组,结合的增删操作,因为增删在不断的修改集合或者数组的长度,这是一个陷阱,很容易造成数组越界(特别是在删除的时候),比如原来集合大小为3,你删除一个,变为2了,此时for会继续遍历第三个元素,就会造成越界。
一般使用迭代器来进行遍历过程中的增删操作。迭代器在工作时会不断的判断是否还有元素可以被迭代。保证了安全性。
作者: 李志群    时间: 2012-9-4 11:27
高级for:foreach(): 只可以遍历数组 和Collection集合。
格式是:foreach(变量名,数组或者Collection集合){
}
这个高级for 只是可以做单纯的遍历集合,不可以有增删的动作。
作者: 刘学    时间: 2012-9-5 09:38
明白了  ,已解决,谢谢大家




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