"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف تتجنب ConcurrentModificationException عند تعديل قائمة ArrayList أثناء التكرار؟

كيف تتجنب ConcurrentModificationException عند تعديل قائمة ArrayList أثناء التكرار؟

نشر في 2025-03-22
تصفح:504

How to Avoid ConcurrentModificationException When Modifying an ArrayList During Iteration?

حلقة تكرار على الميل باستخدام جهاز التكرار للتحقق من وجود شروط محددة:

لـ (ايتراتور it = melements.iterator () ؛ it.hasnext () ؛) { عنصر العنصر = it.next () ؛ // تحقق من موقف العنصر والشروط الأخرى ... if (element.cflag) { melements.add (عنصر جديد ("الكراك" ، getResources () ، (int) touchx ، (int) حساسة)) ؛ // convintmodificationexception يحدث هنا element.cflag = false ؛ } }

ومع ذلك ، يمكن أن يؤدي تعديل قائمة ArrayList (عن طريق إضافة عنصر جديد) أثناء التكرار فوقه باستخدام التكرار التكرار:

قائمة thingStoBeadd = new ArrayList () ؛ لـ (iterator it = melements.iterator () ؛ it.hasnext () ؛) { عنصر العنصر = it.next () ؛ // تحقق من موقف العنصر والشروط الأخرى ... if (element.cflag) { // قم بتخزين العنصر الجديد في قائمة منفصلة للإضافة اللاحقة ThingStobeadd.add (عنصر جديد ("الكراك" ، getResources () ، (int) touchx ، (int) حساس)) ؛ element.cflag = false ؛ } } // أضف جميع العناصر من القائمة المؤقتة إلى القائمة الرئيسية melements.addall (thingstobeadd) ؛
for (Iterator it = mElements.iterator(); it.hasNext();){
    Element element = it.next();

    // Check element's position and other conditions...

    if(element.cFlag){
        mElements.add(new Element("crack",getResources(), (int)touchX,(int)touchY)); // ConcurrentModificationException occurs here
        element.cFlag = false;
    }
}

نهج بديل:

// تحقق من موقف العنصر والشروط الأخرى ... if (element.cflag) { melements.add (عنصر جديد ("الكراك" ، getResources () ، (int) touchx ، (int) حساسة)) ؛ // لا concurrentModificationException element.cflag = false ؛ } }

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3