Anlayabildiğim kadarıyla, neden alıntı yapmadığınız javadoc bölümünde bulunabilir (benimkinin altında vurgu):
Programcının listeyi her iki yönde hareket ettirmesine izin veren listeler için yineleyici, yineleme sırasında listeyi değiştirme ...
Gördüğünüz gibi amaçlanan liste değiştirilirken kullanıma izin vermektir. Olası değişiklikler görünüşe göre elemanların çıkarılmasını içerir.
Şimdi current()
, yineleyicinin geçerli öğe kavramına sahip olacağını varsayarak yineleyici için bir öğeyi kaldırırsak ne olacağını düşünelim? Bu bağlamda, onu mevcut bir unsur kavramı olmadan uygulamanın yolu benim için oldukça mantıklı - çünkü bu şekilde yineleyici elemanların kaldırılması konusunda endişelenmek zorunda değil.
Öyle önemli parçacığı güvenli olmasını arayüz uygulamaları gerektirmediğini javadoc dikkat etmek.
- Bu nedenle, farklı iş parçacıklarından yapılan değişikliklerin doğru şekilde işlenmesini beklememelidir - bunun için uygulama, JSR 133 başına Java Bellek Modeli tarafından belirtildiği gibi erişimi senkronize etmek, görünürlük vb .
ListIterator'ın yapabildiği şey, yineleme sırasında aynı iş parçacığından yapılan değişiklikleri işlemektir. Tüm yineleyiciler böyle değildir, ConcurrentModificationException javadocs özellikle bu konuda uyarır:
... Bu istisnanın her zaman bir nesnenin aynı anda farklı bir iş parçacığı tarafından değiştirildiğini göstermediğini unutmayın. Tek bir iş parçacığı, bir nesnenin sözleşmesini ihlal eden bir dizi yöntem çağrısı yayınlarsa, nesne bu özel durumu atabilir. Örneğin, bir iş parçacığı koleksiyonu hızlı bir yineleyici ile koleksiyon üzerinde yineleme yaparken doğrudan değiştirirse, yineleyici bu istisnayı atar ...