黑马程序员技术交流社区

标题: Collection修改的ConcurrentModificationException [打印本页]

作者: 贾振凯    时间: 2013-3-26 20:02
标题: Collection修改的ConcurrentModificationException
本帖最后由 贾振凯 于 2013-3-27 20:16 编辑
  1. Collection<String> collection = new TreeSet<String>();
  2.                 collection.add("jzk");
  3.                 collection.add("rfl");
  4.                 collection.add("lft");
  5.                 Iterator<String> li = collection.iterator();
  6.                 while(li.hasNext()){
  7.                         String key = li.next();
  8.                         if(key.equals("rfl")){
  9.                                 collection.remove(key);//试了一下,只有HashSet会产生异常
  10.                         }
  11.                         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