產(chǎn)生問題:
在對(duì)list增強(qiáng)for循環(huán)進(jìn)行遍歷的時(shí)候,如果在不恰當(dāng)?shù)奈恢檬褂昧藃emove,就會(huì)產(chǎn)生ConcurrentModificationException異常
產(chǎn)生原因:
java的foreach循環(huán)其實(shí)就是根據(jù)list對(duì)象創(chuàng)建一個(gè)Iterator迭代對(duì)象,然后針對(duì)Iterator進(jìn)行遍歷.遍歷過程中會(huì)調(diào)用對(duì)應(yīng)的hasNext和next方法
(1)ArrayList的hasnext和next 方法
? ?(2)LinkedList的hasnext和next 方法
兩種list的iterator 都有一個(gè)方法是checkForComodification,目的是校驗(yàn)是否list被修改過。list中有個(gè)屬性是modCount众眨,記錄著操作修改list的屬性,如果操作list的add或remove,modCount屬性都會(huì)進(jìn)行+1的操作搜吧。
如果發(fā)生了修改,那么在下一次執(zhí)行到這一步校驗(yàn)的時(shí)候杨凑,就會(huì)發(fā)現(xiàn)兩個(gè)值不相等滤奈,拋出異常。