2012-06-14 41 views

回答

31

許多Java的集合產生「fail-fast」的迭代器,這意味着如果集合在迭代器創建後發生更改,迭代器將失效,並儘快拋出ConcurrentModificationException。 (與之後失敗或返回無效數據相比)

爲了支持此功能,集合必須跟蹤它是否已被修改。每次收集更改時,它都會增加modcount。當集合生成一個迭代器時,迭代器將從創建它時的值存儲modcount。然後,無論何時嘗試使用迭代器,它都會檢查其保存的modcount是否與父集合的當前modcount不同;如果是,則迭代器失敗,出現ConcurrentModificationException

(此規則的一個例外是,修改通過迭代器本身(如迭代器的remove方法制得的集合),不壞迭代器)。這真是很好的解釋

+1

感謝。我知道它做了這樣的事情,但不詳細 – moeTi

+0

非常好的解釋。現在是有道理的。 –

+0

代碼:http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/ArrayList.java#ArrayList.ListItr – roottraveller