Chúng tôi đều biết bạn không thể làm như sau vì ConcurrentModificationException
:
for (Object i : l) {
if (condition(i)) {
l.remove(i);
}
}
Nhưng điều này rõ ràng đôi khi hoạt động, nhưng không phải luôn luôn. Đây là một số mã cụ thể:
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);
}
Điều này, tất nhiên, kết quả trong:
Exception in thread "main" java.util.ConcurrentModificationException
Mặc dù nhiều chủ đề không làm điều đó. Dù sao.
Giải pháp tốt nhất cho vấn đề này là gì? Làm thế nào tôi có thể xóa một mục khỏi bộ sưu tập trong một vòng lặp mà không ném ngoại lệ này?
Tôi cũng đang sử dụng một tùy ý Collection
ở đây, không nhất thiết là một ArrayList
, vì vậy bạn không thể dựa vào get
.