Kita semua tahu Anda tidak dapat melakukan hal berikut karena ConcurrentModificationException
:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Tapi ini tampaknya bekerja kadang-kadang, tetapi tidak selalu. Ini beberapa kode spesifik:
public static void main(String[] args) {
Collection<Integer> l = new ArrayList<>();
for (int i = 0; i < 10; ++i) {
l.add(4);
l.add(5);
l.add(6);
}
for (int i : l) {
if (i == 5) {
l.remove(i);
}
}
System.out.println(l);
}
Ini, tentu saja, menghasilkan:
Exception in thread "main" java.util.ConcurrentModificationException
Meskipun beberapa utas tidak melakukannya. Bagaimanapun.
Apa solusi terbaik untuk masalah ini? Bagaimana saya bisa menghapus item dari koleksi dalam satu lingkaran tanpa membuang pengecualian ini?
Saya juga menggunakan arbitrer di Collection
sini, tidak harus ArrayList
, jadi Anda tidak bisa mengandalkan get
.