التكرار في جافا

التكرار في جافا

يعد Iterator في Java أحد الأكثر استخدامًا المؤشرات في Java Collections Framework . يتم استخدامه لاجتياز أو تكرار عناصر المجموعة واحدًا تلو الآخر.

  • يتم استخدامه لاجتياز العناصر في الاتجاه الأمامي فقط.
  • يزيل العناصر بأمان أثناء الاجتياز باستخدام الإزالة ().
  • Iterator هو مؤشر عالمي ينطبق على جميع أنواع المجموعات - مجموعة القائمة وقائمة الانتظار.

إعلان التكرار

مكرر الواجهة العامة

يمثل E هنا نوع العناصر التي سيتم التكرار عليها.

إنشاء كائن التكرار

يتم إنشاء كائن Iterator عن طريق استدعاء الأسلوب iterator() على كائن مجموعة. هنا سوف نستخدم Iterator لاجتياز وطباعة كل عنصر في ملف ArrayList .

مجموعة الأسماء = قائمة ArrayList الجديدة <>()؛
مكرر itr =names.iterator();

Java
   import     java.util.ArrayList  ;   import     java.util.Iterator  ;   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {          // Create an ArrayList and add some elements      ArrayList   <  String  >     al     =     new     ArrayList   <>  ();      al  .  add  (  'A'  );      al  .  add  (  'B'  );      al  .  add  (  'C'  );      // Obtain an iterator for the ArrayList      Iterator   <  String  >     it     =     al  .  iterator  ();      // Iterate through the elements and print each one      while     (  it  .  hasNext  ())     {          // Get the next element      String     n     =     it  .  next  ();         System  .  out  .  println  (  n  );         }      }   }   

الإخراج
A B C  

التسلسل الهرمي للتكرار

التكرار هو جزء من حزمة java.util ويتم تنفيذه بواسطة جميع فئات المجموعة من خلال واجهاتها الفرعية.

listiterator_extends_iterator_مكرر المؤشر

طرق واجهة التكرار

تحدد واجهة التكرار ثلاث طرق كما هو موضح أدناه:

  • التالي (): يُرجع صحيحًا إذا كان التكرار يحتوي على المزيد من العناصر.
  • التالي(): إرجاع العنصر التالي في التكرار. يرمي NoSuchElementException إذا لم يكن هناك المزيد من العناصر.
  • يزيل(): يزيل العنصر الأخير الذي تم إرجاعه بواسطة التالي (). يمكن استدعاء هذه الطريقة مرة واحدة فقط لكل مكالمة إلى next().

ملحوظة : يمكن لطريقة الإزالة () طرح استثناءين، وهما كما يلي:

العمل الداخلي

سنحاول في هذا القسم فهم كيفية عمل Java Iterator وأساليبه داخليًا. دعونا نأخذ كائن LinkedList التالي لفهم هذه الوظيفة.

الخطوة 1: الآن دعونا نقوم بإنشاء كائن Iterator على كائن القائمة كما هو موضح أدناه:

مكرر cityIterator = city.iterator();

سيبدو مكرر "citiesIteartor" كما يلي:

مكرر جافا الخطوة 1الخطوة 1

يشير مؤشر التكرار هنا إلى العنصر الأول في القائمة.

الخطوة 2: الآن سوف نقوم بتشغيل مقتطف التعليمات البرمجية التالي.

cityIterator.hasNext();
cityIterator.next();

مكرر جافا الخطوة 2الخطوة 2

عندما نقوم بتشغيل مقتطف التعليمات البرمجية أعلاه، يشير مؤشر Iterator إلى العنصر الأول في القائمة كما هو موضح في الرسم البياني أعلاه.

الخطوة 3: الآن سوف نقوم بتشغيل مقتطف التعليمات البرمجية التالي.

cityIterator.hasNext();
cityIterator.next();

مكرر جافا الخطوة 3الخطوة 3


عندما نقوم بتشغيل مقتطف التعليمات البرمجية أعلاه، يشير مؤشر Iterator إلى العنصر الثاني في القائمة كما هو موضح في الرسم البياني أعلاه.

الخطوة 4: قم بهذه العملية للوصول بمؤشر التكرار إلى العنصر النهائي في القائمة.

Java Iterator Step nالخطوة 4

الخطوة 5: بعد قراءة العنصر الأخير، إذا قمنا بتشغيل مقتطف الشفرة أدناه، فسوف يُرجع قيمة خاطئة.

cityIterator.hasNext();

Java Iterator في النهاية

كما يشير مؤشر التكرار إلى ما بعد العنصر الأخير من القائمة التالي () الطريقة ترجع قيمة خاطئة.

ملحوظة: يدعم Java Iterator تكرار الاتجاه الأمامي فقط، لذلك يُعرف بالمؤشر أحادي الاتجاه. في المقابل، يعد ListIterator ثنائي الاتجاه مما يسمح بالاجتياز في كلا الاتجاهين.

جافا-إلتيراتور-6مكرر جافا: الاتجاه إلى الأمام

مثال: سنستخدم هنا Iterator لاجتياز وإزالة العناصر الفردية من ArrayList.

Java
   import     java.util.ArrayList  ;   import     java.util.Iterator  ;   public     class   Geeks     {      public     static     void     main  (  String  []     args  )     {          // Creating an ArrayList of Integer type      ArrayList   <  Integer  >     al     =     new     ArrayList   <>  ();      // Adding elements to the ArrayList      for     (  int     i     =     0  ;     i      <     10  ;     i  ++  )     {      al  .  add  (  i  );      }      // Printing the original list      System  .  out  .  println  (  'Original List: '     +     al  );      // Creating an Iterator for the ArrayList      Iterator   <  Integer  >     itr     =     al  .  iterator  ();      // Iterating through the list and removing odd elements      while     (  itr  .  hasNext  ())     {          // Getting the next element      int     i     =     itr  .  next  ();             System  .  out  .  print  (  i     +     ' '  );         // Removing odd elements      if     (  i     %     2     !=     0  )     {      itr  .  remove  ();      }      }      System  .  out  .  println  ();      // Printing the modified list after removal of odd elements      System  .  out  .  println  (  'Modified List: '     +     al  );      }   }   

الإخراج
Original List: [0 1 2 3 4 5 6 7 8 9] 0 1 2 3 4 5 6 7 8 9 Modified List: [0 2 4 6 8]  

توضيح: في المثال أعلاه، قمنا بإنشاء قائمة ArrayList من الأعداد الصحيحة ثم قمنا بالتكرار من خلالها باستخدام Iterator وإزالة جميع الأرقام الفردية. يقوم بطباعة القائمة قبل وبعد إزالة العناصر الفردية وطباعة القائمة المعدلة بالأرقام الزوجية فقط.