العودة إلى الدورة

التنقل في المجموعات باستخدام المكررات (Iterators) وحلقة for المحسنة

إتقان لغة Java: من الصفر إلى مطور محترف (رحلة من 50 درساً)

الدرس 41: التنقل في المجموعات باستخدام المكررات

هناك طرق عديدة للتكرار عبر المجموعات، ولكل منها قدرات مختلفة.

1. حلقة for المحسنة (For-Each)

هذه هي أبسط طريقة للتكرار عبر أي مجموعة (List أو Set أو مفاتيح الخرائط) تنفذ واجهة Iterable. وهي للقراءة فقط وموصى بها بشدة لسهولتها.

java List planets = List.of("Mars", "Earth", "Jupiter");

for (String planet : planets) { System.out.println(planet); }

2. واجهة Iterator

توفر جميع فئات المجموعات دالة iterator() التي تعيد كائن Iterator. هذه هي الطريقة الوحيدة لحذف العناصر بأمان من المجموعة أثناء التكرار عليها.

دوال المكرر الرئيسية

  • hasNext(): تعيد true إذا كان هناك المزيد من العناصر.
  • next(): تعيد العنصر التالي وتقدم المكرر.
  • remove(): تحذف العنصر الأخير الذي أعادته دالة next().

java import java.util.Iterator;

List numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); Iterator it = numbers.iterator();

while (it.hasNext()) { Integer num = it.next(); if (num % 2 == 0) { it.remove(); // حذف آمن أثناء التكرار } }

System.out.println(numbers); // المخرج: [1, 3, 5]

مشكلة التعديل المتزامن (Fail-Fast): إذا حاولت تعديل مجموعة (إضافة/حذف) داخل حلقة for عادية أو محسنة، فستطلق Java استثناء ConcurrentModificationException. دالة Iterator.remove() هي الطريقة الآمنة لتعديل المجموعة أثناء التكرار.