เราทุกคนรู้ว่าคุณไม่สามารถทำสิ่งต่อไปนี้ได้เนื่องจาก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
ได้