1. 程式人生 > >list在遍歷過程中的add/remove

list在遍歷過程中的add/remove

com index 遍歷集合 很多 pub iterator clas util http

平時開發過程中,很多人估計都遇到過一個問題:在遍歷集合的的過程中,進行add或者remove操作的時候,會出現2類錯誤,包括:
java.util.ConcurrentModificationException for in遍歷過程中add/remove導致的錯誤
java.lang.IndexOutOfBoundsException 越界錯誤,for循環的時候刪除元素。

那麽我們應該怎樣避免這個問題呢?

首先對於add操作:建議利用原生的for循環。remove操作利用foreach操作

具體代碼如下:remove

技術分享圖片

add:

技術分享圖片

經典錯誤1:

技術分享圖片

什麽錯誤呢?這段代碼用於只會輸出list的第一個元素。問題出在鏈式寫法上。

每次循環時候先調用了list.iterator() 在該方法中每次都是重新new了一個新的對象
public Iterator<E> iterator() {
return new Itr();
}
所以每一次都是一個新的遍歷對象,所以輸出第一個元素。
那麽為什麽每次都要new一個新的Itr()?我猜想應該是為了並發的讀,每次讀的都是一份獨立的數據,避免多個並發讀的時候,出現當前指針問題。
處理辦法:將list.iteraotr() 放在外面即可,保證循環中循環的是1個對象。

經典錯誤2:

技術分享圖片

會陷入死循環

list在遍歷過程中的add/remove