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