1 問題 :在list<String> 中清空所有的記錄,只使用使用單循環(huán),不使用removeAll()
2 可以寫出五種方式,代碼如下:
3運(yùn)行結(jié)果如下:
2,4,5運(yùn)行正常,1,3拋出
java.util.ConcurrentModificationException
4問題原因:
1,3都是因?yàn)閘ist的長(zhǎng)度改變,Iterator執(zhí)行next()方法時(shí),調(diào)用checkForComodification()時(shí)出 錯(cuò),1,3是同一個(gè)問題,這兩個(gè)方法remove操作都是執(zhí)行的是ArrayList中的remove方法,根本原因在于 expectedModCount與modCount他們的不相等,由于執(zhí)行了ArrayList中的remove(),modCount在每一次循環(huán)值 會(huì)發(fā)生改變,而expectedModCount并沒有發(fā)生,在執(zhí)行checkForComodification()方法就會(huì)拋出異常。
2之所以正確運(yùn)行是因?yàn)檎{(diào)用了Iterator的remove方法,4,5不會(huì)執(zhí)行checkForComodification()操作,所以不會(huì)出現(xiàn)這種異常。
5結(jié)論 :在執(zhí)行remove()不要將ArrayList 與Interator混合使用,單獨(dú)使用Interator以及ArrayList的刪除都是OK的
6參考的源碼
Iterator的next()方法:
Iterator的remove()方法:
ArrayList的remove()方法:
聯(lián)系客服