ในการพัฒนาโครงการเรามักจะต้องลบองค์ประกอบบางอย่างใน ArrayList แบบไดนามิก
วิธีที่ผิด:
<name pre = "code"> สำหรับ (int i = 0, len = list.size (); i <len; ++ i) {ถ้า (list.get (i) == xxx) {list.remove (i); -วิธีการข้างต้นจะโยนข้อยกเว้นดังต่อไปนี้:
ข้อยกเว้นในเธรด "Main" java.lang.indexoutofboundsexception: ดัชนี: 3, ขนาด: 3 ที่ java.util.arraylist.rangecheck (แหล่งที่ไม่รู้จัก) ที่ java.util.arraylist.get
เนื่องจากคุณลบองค์ประกอบ แต่ไม่ได้เปลี่ยนตัวห้อยซ้ำดังนั้นเมื่อการวนซ้ำมาถึงรายการสุดท้ายข้อยกเว้นจะถูกโยนลงไป
โปรแกรมข้างต้นสามารถปรับปรุงได้ดังนี้:
สำหรับ (int i = 0, len = list.size (); i <len; ++ i) {ถ้า (list.get (i) == xxx) {list.remove (i); -len; // ลดหนึ่ง}}รหัสข้างต้นถูกต้อง
มาแนะนำวิธีแก้ปัญหาอื่น:
อินเทอร์เฟซรายการใช้อินเตอร์เฟสตัววนซ้ำภายในโดยให้นักพัฒนาซอฟต์แวร์ด้วยตัววนซ้ำ () เพื่อรับวัตถุตัววนซ้ำของวัตถุรายการปัจจุบัน
Iterator <string> slistiterator = list.iterator (); ในขณะที่ (slistiterator.hasnext ()) {string e = slistiterator.next (); if (e.equals ("3")) {slistiterator.remove (); -ข้างต้นยังถูกต้องและแนะนำวิธีแก้ปัญหาที่สอง
หลักการดำเนินการของโซลูชันทั้งสองนั้นเหมือนกันมากและสิ่งที่สองก็ถูกห่อหุ้มโดย JDK
เมื่อดูซอร์สโค้ด ArrayList คุณจะพบว่ามีการใช้วิธีการหลายอย่างภายในตามอินเตอร์เฟสของตัววนซ้ำดังนั้นจึงแนะนำวิธีแก้ปัญหาที่สอง
ข้างต้นเป็นเนื้อหาทั้งหมดของวิธีการที่จะลบองค์ประกอบเฉพาะใน Loop Arraylist Java Collection ที่นำมาให้คุณ ฉันหวังว่าทุกคนจะสนับสนุน wulin.com ~