Sejauh yang saya tahu, alasannya dapat ditemukan di bagian javadoc yang tidak Anda kutip (penekanan di bawah tambang):
Sebuah iterator untuk daftar yang memungkinkan programmer untuk menelusuri daftar di kedua arah, memodifikasi daftar selama iterasi ...
Anda lihat, tujuan yang dimaksudkan adalah untuk memungkinkan penggunaan saat daftar sedang dimodifikasi. Kemungkinan modifikasi ternyata termasuk penghapusan elemen.
Sekarang pikirkan apa yang akan terjadi jika kita menghapus elemen yang akan current()
untuk iterator - dengan asumsi iterator akan memiliki gagasan tentang elemen saat ini? Dalam konteks ini, cara untuk mengimplementasikannya tanpa gagasan tentang elemen saat ini cukup masuk akal bagi saya - karena dengan begitu, iterator tidak perlu khawatir tentang penghapusan elemen.
Hal ini penting untuk dicatat bahwa javadoc tidak memerlukan implementasi antarmuka untuk thread aman.
- Karena itu, seseorang seharusnya tidak mengharapkan penanganan modifikasi yang benar dilakukan dari utas berbeda - untuk itu, implementasi harus menyediakan cara tambahan untuk menyinkronkan akses, jaminan visibilitas dll seperti yang ditentukan oleh Java Memory Model per JSR 133 .
Apa yang ListIterator sanggup, adalah menangani modifikasi yang dilakukan dari utas yang sama saat iterasi. Tidak semua iterator seperti itu, javadocs ConcurrentModificationException secara khusus memperingatkan tentang ini:
... Perhatikan bahwa pengecualian ini tidak selalu menunjukkan bahwa suatu objek telah diubah secara bersamaan oleh utas yang berbeda. Jika satu utas mengeluarkan urutan pemanggilan metode yang melanggar kontrak suatu objek, objek tersebut dapat membuang pengecualian ini. Misalnya, jika utas memodifikasi koleksi secara langsung ketika sedang mengulangi koleksi dengan iterator gagal-cepat, iterator akan melempar pengecualian ini ...