當使用Iterator循環訪問Collection時,如果一刪除元素(Collection.remove())就會拋出異常:ConcurrentModificationException .不得其解,在狗狗上找到一個解釋:
(1)集合只在一處被使用,這自然沒有并發問題,不過還是不可以大膽修改,如果循環中刪除集合中的元素,一定要調用Iterator的remove方法,而不是Collection的remove方法,前者刪除后會修改Iterator的一個值,使得循環以為集合沒被修改,可以繼續進行,而調用后者沒有修改Iterator中的值,繼續循環同樣會拋出異常。至于添加元素,Iterator中沒有提供相應方法,所以如果在循環中添加,添加后就只能跳出循環了。
(2)同一個集合在多處被使用,索性不要刪除了,本來這種情況就不應該修改集合大小,如果你決得集合大小的修改不會影響程序的正常邏輯,那么使用時只好clone一個了。
posted on 2005-08-11 14:42
ZhuJun 閱讀(816)
評論(0) 編輯 收藏 所屬分類:
開發手記