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