黑马程序员技术交流社区
标题:
Collection修改的ConcurrentModificationException
[打印本页]
作者:
贾振凯
时间:
2013-3-26 20:02
标题:
Collection修改的ConcurrentModificationException
本帖最后由 贾振凯 于 2013-3-27 20:16 编辑
Collection<String> collection = new TreeSet<String>();
collection.add("jzk");
collection.add("rfl");
collection.add("lft");
Iterator<String> li = collection.iterator();
while(li.hasNext()){
String key = li.next();
if(key.equals("rfl")){
collection.remove(key);//试了一下,只有HashSet会产生异常
}
System.out.println(key);
复制代码
这段程序:
collection =new TreeSet<String>()的时候打印结果是
jzk
lft
rfl
***********************************************************************8
collection =new HashSet<String>()的时候打印结果是
lft
rfl
Exception in thread "main" java.util.ConcurrentModificationException
*******************************************************************************
collection =new ArrayList<String>()或者 LinkedList<String>()的时候打印结果是
jzk
rfl
怎么会出现这么个情况,我还以为都会出现ConcurrentModificationException异常!
作者:
我是小白
时间:
2013-3-26 23:10
collection实际上存储的是对象的内存地址,操作内存地址的方法有两种,一种是迭代器,一种是collection的方法,使用iterator的时候,就不能使用collection去操作,简单来说,同一资源,两个同时调用,必定会发生问题。iterator中确实有remove()方法,所以应该这么改:
collection.remove(key);
改成:
li.remove(key);就可以了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2