黑马程序员技术交流社区
标题:
集合问题
[打印本页]
作者:
黑马-王泽斌
时间:
2012-8-10 22:18
标题:
集合问题
为什么在集合里不能用增强for循环进行数据的删除操作?
作者:
焦晨光
时间:
2012-8-10 22:25
增强for循环,只是用来进行简单的遍历数组和集合
它无法访问集合和数组中的内容更不可以删除或改变集合中的元素
增强for循环的优点是:使代码简洁易懂
缺点是有很大的局限性:无法访问和改变集合中的元素
如果想要访问和处理集合中的元素就必须要用Iterator接口里的方法来操作
可以用Iterator接口的remove()方法删除集合中的元素
作者:
来明坤
时间:
2012-8-10 22:27
遍历集合过程中,不能对集合本身进行操作的吧 印象里是这个原因
作者:
黑马-王泽斌
时间:
2012-8-10 22:39
问题已经解决
作者:
尤洋
时间:
2012-8-10 22:43
本帖最后由 尤洋 于 2012-8-10 22:47 编辑
原因很简单,增强for底层调用的是Iterator,
但是在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以为了安全性考虑 集合里不能用增强for循环进行数据的删除操作
如果必须要操作数据的话,可以使用迭代器自身的方法去操作,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的listIterator方法获取。
作者:
周坤
时间:
2012-8-10 22:49
public class ForDemo {
/**
* @param args
*/
public static void main(String[] args) {
List list=new ArrayList();
list.add(1);
list.add(2);
list.add(3);
System.out.println(list);
for(Object obj:list){
System.out.print(obj);
//list.remove(0);//会出java.util.ConcurrentModificationException
list.set(1, 8);
}
System.out.println(list);
}
}
复制代码
输出的结果是
[1, 2, 3]
183[1, 8, 3]
其中list还是可以改变的,
但是remove,add等方法,会改变list的结构,在迭代的时候,会发生并发异常。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2