บ่อยครั้งที่เราต้องการลบองค์ประกอบบางอย่างออกจากคอลเลกชัน บางคนอาจเขียนสิ่งนี้
คัดลอกรหัสรหัส ดังต่อไปนี้:
โมฆะสาธารณะดำเนินการ (รายการรายการ) {
สำหรับ (ตัววนซ้ำ it = list.iterator(); it.hasNext();) {
สตริง str = (สตริง) it.next();
ถ้า (str.equals("เฉิงกัง")){
รายการ ลบ (str);
-
-
-
ทันทีที่ใช้วิธีการเขียนนี้ ข้อยกเว้นต่อไปนี้จะถูกรายงาน:
ข้อยกเว้นในเธรด "main" java.util.ConcurrentModificationException
ที่ java.util.AbstractList$Itr.checkForComodification(AbstractList.java:449)
เนื่องจากองค์ประกอบของรายการไม่สามารถลบได้ในขณะที่อยู่ในลูป ต่อมาฉันทำสิ่งนี้ ซึ่งเป็นวิธีที่โง่มาก แนวคิดคือ: สร้างรายการเพื่อจัดเก็บองค์ประกอบที่จะลบโดยเฉพาะ หลังจากการวนซ้ำ ให้ใช้เมธอด List.removeAll เพื่อลบองค์ประกอบ รหัสมีดังนี้:
คัดลอกรหัสรหัส ดังต่อไปนี้:
โมฆะสาธารณะดำเนินการ (รายการรายการ) {
รายการ RemoveList= ใหม่ ArrayList();
สำหรับ (ตัววนซ้ำ it = list.iterator(); it.hasNext();) {
สตริง str = (สตริง) it.next();
ถ้า (str.equals("เฉิงกัง")){
RemoveList.add(str);
-
-
list.removeAll(removeList);
-
วิธีนี้สามารถแก้ปัญหาได้จริง แต่วิธีนี้ยุ่งยากเกินไป จริงๆ แล้วอาจมีวิธีที่ง่ายกว่าและมีประสิทธิภาพมากกว่า ซึ่งก็คือการใช้วิธี Iterator.remove ดังต่อไปนี้:
คัดลอกรหัสรหัส ดังต่อไปนี้:
สำหรับ (ตัววนซ้ำ it = list.iterator(); it.hasNext();) {
สตริง str = (สตริง) it.next();
ถ้า (str.equals("เฉิงกัง")){
มัน.remove();
-
-
ดังนั้น ยิ่งคุณรู้พื้นฐานของ Java มากเท่าไร รหัสของคุณก็จะยิ่งง่ายขึ้นเท่านั้น ในทางตรงกันข้าม หากโค้ดของคุณซับซ้อนเป็นพิเศษ จะต้องมีบางอย่างผิดปกติกับวิธีการหรือการออกแบบ