這週在開發中遇到了乙個以前沒遇到的小bug,在這裡記錄下來。
list集合,我們平時都經常使用。但是,我在遍歷list集合時,呼叫了list集合的remove方法來刪除集合中的元素,簡單的**結構是這樣:
for
(string x:list)
但是,就是類似這樣乙個簡單的小程式,在執行時,遇到了如下的異常資訊:
exception in thread "main" j**a.util.concurrentmodificationexception
at j**a.util.abstractlist$itr.checkforcomodification(unknown source)
at j**a.util.abstractlist$itr.next(unknown source)
當時很不理解。後來上網找資料,看牛人分析list的原始碼才發現原因,是因為呼叫list的remove方法後,使expectedmodcount(表示對
arraylist修改次數的期望值,它的初始值為modcount)和modcount(是abstractlist類中的乙個成員變數)導致的.具體解析,可以
參考部落格:一步步的分析的很細緻。同樣,在部落格中也給出了解決方案:那就是
使用iterator提供的remove方法,用於刪除當前元素:
public
class
test
}
}
STL容器遍歷時刪除元素
stl容器遍歷時在迴圈體內刪除元素最容易出錯了,根本原因都是因為迭代器有效性問題,在此記下通用刪除方法,該方法適用於所有含erase成員函式的序列容器 1 std vectormyvec 23 std vector iterator it myvec.begin 4while it myvec.en...
Python 遍歷時刪除的處理 說明
遍歷時,建議不能直接進行remove刪除,會跳過某些元素 例項 a 1,2,3,4,5 for i in a a.remove i print a a 1,2,3,4,5 for i in a a.remove i print a 結果 2,4 remove 移除列表中某個值的第乙個匹配項 s 1,...
Java ArrayList遍歷時刪除乙個元素
我們知道arraylist的底層是用陣列實現的,如果你刪除了其中乙個元素,那麼後邊的元素都會向前移動。所以在遍歷時如果刪除元素,就要小心了。第一種方法,用陣列下標進行遍歷,如果需要刪除元素,我們從後向前遍歷,這樣不論有沒有元素刪除,我們都不會遺漏未被遍歷的元素。第二種方法,我們使用迭代器。itera...