우리는 당신이 다음을 할 수 없다는 것을 알고 있습니다 ConcurrentModificationException
.
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
그러나 이것은 때때로 작동하지만 항상 그런 것은 아닙니다. 특정 코드는 다음과 같습니다.
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);
}
이것은 물론 다음과 같은 결과를 낳습니다.
Exception in thread "main" java.util.ConcurrentModificationException
여러 스레드가 수행하지 않더라도. 어쨌든.
이 문제에 대한 가장 좋은 해결책은 무엇입니까? 이 예외를 발생시키지 않고 루프에서 컬렉션에서 항목을 제거하려면 어떻게해야합니까?
나는 또한 Collection
여기에 반드시 필요한 것은 아니지만 임의의 것을 사용 ArrayList
하므로 의지 할 수 없습니다 get
.