2012-06-14 18 views

cevap

31

Java koleksiyonlarının çoğu "başarısız-hızlı" olan yineleyiciler üretir, yani bir yineleyici oluşturulduktan sonra koleksiyon değiştirilirse yineleyici geçersiz sayılır ve mümkün olan en kısa sürede bir ConcurrentModificationException atılır. (Daha sonra başarısız oluncaya veya geçersiz veriler döndürülürken).

Bu işlevi desteklemek için, koleksiyonun değiştirilip değiştirilmediğini takip etmelidir. Koleksiyon her değiştiğinde, modcount değerini artırır. Koleksiyon bir yineleyici ürettiğinde, yineleyici, oluşturulduğu zaman modcount değerini depolar. Daha sonra, yineleyiciyi kullanmaya çalıştığınızda, kaydedilen modcount'un ana koleksiyonun geçerli modcount'dan farklı olup olmadığını kontrol eder; öyleyse yineleyici bir ConcurrentModificationException ile başarısız olur.

+1

sayesinde bu gerçekten iyi bir açıklama için (Bu kuralın bir istisnası yineleyici remove yöntemi gibi yineleyici kendisi (üzerinden yapılan koleksiyona modifikasyonlar) yineleyici geçersiz kalmamasıdır.) Olduğunu. Bunun böyle bir şey yaptığını biliyordum ama detaylı değil – moeTi

+0

Çok iyi bir açıklama. Şimdi mantıklı. –

+0

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

İlgili konular