当使用Iterator循环访问Collection时,如果一删除元素(Collection.remove())就会抛出异常:ConcurrentModificationException .不得其解,在狗狗上找到一个解释:
(1)集合只在一处被使用,这自然没有并发问题,不过还是不可以大胆修改,如果循环中删除集合中的元素,一定要调用Iterator的remove方法,而不是Collection的remove方法,前者删除后会修改Iterator的一个值,使得循环以为集合没被修改,可以继续进行,而调用后者没有修改Iterator中的值,继续循环同样会抛出异常。至于添加元素,Iterator中没有提供相应方法,所以如果在循环中添加,添加后就只能跳出循环了。
(2)同一个集合在多处被使用,索性不要删除了,本来这种情况就不应该修改集合大小,如果你决得集合大小的修改不会影响程序的正常逻辑,那么使用时只好clone一个了。
posted on 2005-08-11 14:42
ZhuJun 阅读(811)
评论(0) 编辑 收藏 所属分类:
开发手记