一、JAVA中循環遍歷list有三種方式for循環、加強for循環(也就是常說的foreach循環)、iterator遍歷併發
for循環遍歷list(會報錯)函數
- 問題在於,刪除某個元素後,list的大小發生了變化,而你的索引也在變化,因此會致使你在遍歷的時候漏掉某些元素
- 這種方式能夠用在刪除特定的一個元素時使用,但不適合循環刪除多個元素時使用
加強for循環(單線程main函數測試,也會報錯)測試
- 刪除元素後繼續循環會報錯誤信息ConcurrentModificationException
- 由於元素在使用的時候發生了併發的修改,致使異常拋出
- 可是刪除完畢立刻使用break跳出,則不會觸發報錯
iterator遍歷線程
- 這種方式能夠正常的循環及刪除
- 但要注意的是,請使用iterator的remove方法
- 若是用list的remove方法一樣會報上面提到的ConcurrentModificationException錯誤
總結:blog
- 循環刪除list中特定一個元素的,能夠使用三種方式中的任意一種,但在使用中要注意上面分析的各個問題
- 循環刪除list中多個元素的,應該使用迭代器iterator方式