Hepimiz aşağıdakiler nedeniyle aşağıdakileri yapamayacağınızı biliyoruz ConcurrentModificationException
:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Ama bu görünüşe göre bazen çalışıyor, ama her zaman değil. İşte bazı özel kodlar:
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);
}
Bu, elbette, aşağıdakilerle sonuçlanır:
Exception in thread "main" java.util.ConcurrentModificationException
Birden fazla iş parçacığı bunu yapmasa da. Neyse.
Bu sorunun en iyi çözümü nedir? Bu istisnayı atmadan bir öğeyi koleksiyondan bir döngüde nasıl kaldırabilirim?
Ben de Collection
burada keyfi olarak değil, keyfi bir kullanıyorum ArrayList
, bu yüzden güvenemezsin get
.