في تطوير المشروع ، قد نحتاج غالبًا إلى حذف بعض العناصر في قائمة ArrayList.
طريقة خاطئة:
<pre name = "code"> for (int i = 0 ، len = list.size () ؛ i <len ؛ ++ i) {if (list.get (i) == xxx) {list.remove (i) ؛ }}الطريقة أعلاه سوف ترمي الاستثناء التالي:
استثناء في الموضوع "الرئيسي" java.lang.indexoutofboundsexception: الفهرس: 3 ، الحجم: 3 في java.util.arraylist.rangecheck (مصدر غير معروف) على java.util.arraylist.get (مصدر غير معروف) في listdemo.main (listdemo.java:20)
نظرًا لأنك حذفت العنصر ، لكنك لم تغير مركز التكرار ، بحيث عندما يصل التكرار إلى آخر ، سيتم طرح استثناء.
يمكن تحسين البرنامج أعلاه على النحو التالي:
لـ (int i = 0 ، len = list.size () ؛ i <len ؛ ++ i) {if (list.get (i) == xxx) {list.remove (i) ؛ -len ؛ // قلل من واحد}}الرمز أعلاه صحيح.
دعونا نقدم حلًا آخر:
تقوم واجهة القائمة بتنفيذ واجهة ITerator داخليًا ، مما يوفر للمطور جهاز التكرار () للحصول على كائن Iterator لكائن القائمة الحالي.
iterator <string> slistiterator = list.iterator () ؛ بينما (slistiterator.hasnext ()) {string e = slistiterator.next () ؛ if (E.equals ("3")) {slistiterator.remove () ؛ }}ما سبق صحيح أيضًا ، ويوصى الحل الثاني.
مبادئ التنفيذ للحلين متماثلان إلى حد كبير ، والثاني مغلف فقط بواسطة JDK.
عند عرض رمز مصدر ArrayList ، ستجد أن العديد من الطرق يتم تنفيذها داخليًا بناءً على واجهة ITerator ، لذلك يوصى بالحل الثاني.
ما سبق هو المحتوى الكامل للطريقة لحذف عناصر محددة في حلقة ArrayList ArrayList Collection Collection. آمل أن يدعم الجميع wulin.com ~