איטרטור בג'אווה

איטרטור בג'אווה

איטרטור בג'אווה הוא אחד הנפוצים ביותר בשימוש סמנים במסגרת Java Collections Framework . הוא משמש כדי לעבור או לחזור על אלמנטים של אוסף אחד אחד.

  • הוא משמש למעבר אלמנטים בכיוון קדימה בלבד.
  • מסיר אלמנטים בבטחה במהלך המעבר באמצעות remove().
  • Iterator הוא סמן אוניברסלי שמתאים לכל סוגי האוסף - ערכת רשימה ותור.

הצהרת איטרטור

איטרטור ממשק ציבורי

כאן E מייצג את סוג האלמנטים שיש לבצע איטרציה עליהם.

יצירת אובייקט של איטרטור

אובייקט Iterator נוצר על ידי קריאה למתודה iterator() על אובייקט אוסף. כאן נשתמש באיטרטור כדי לעבור ולהדפיס כל אלמנט ב-an ArrayList .

גְבִיָה שמות = New 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_איטרטור-סמן

שיטות ממשק איטרטור

ממשק האיטרטור מגדיר שלוש שיטות כמפורט להלן:

  • hasNext(): מחזירה true אם האיטרציה כוללת יותר אלמנטים.
  • הַבָּא(): מחזירה את הרכיב הבא באיטרציה. זה זורק NoSuchElementException אם לא קיים עוד אלמנט.
  • לְהַסִיר(): מסיר את האלמנט האחרון שהוחזר על ידי next(). ניתן לקרוא לשיטה זו רק פעם אחת בכל קריאה ל-next().

פֶּתֶק השיטה : remove() יכולה להעלות שני חריגים, כלומר באופן הבא:

עבודה פנימית

בחלק זה ננסה להבין כיצד Java Iterator והשיטות שלו פועלות באופן פנימי. הבה ניקח את האובייקט LinkedList הבא כדי להבין את הפונקציונליות הזו.

שלב 1: כעת הבה ניצור אובייקט Iterator באובייקט List כפי שמוצג להלן:

איטרטור cityIterator = cities.iterator();

האיטרטור 'citiesIteartor' ייראה כך:

Java Iterator שלב 1שלב-1

כאן הסמן של איטרטור מצביע לפני האלמנט הראשון של הרשימה.

שלב 2: כעת נריץ את קטע הקוד הבא.

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

Java Iterator שלב 2שלב-2

כאשר אנו מריצים את קטע הקוד שלמעלה, הסמן של Iterator מצביע על האלמנט הראשון ברשימה כפי שמוצג בתרשים לעיל.

שלב 3: כעת נריץ את קטע הקוד הבא.

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

Java Iterator שלב 3שלב-3


כאשר אנו מריצים את קטע הקוד שלמעלה, הסמן של Iterator מצביע על האלמנט השני ברשימה כפי שמוצג בתרשים לעיל.

שלב 4: בצע את התהליך הזה כדי להגיע לסמן האיטרטור לאלמנט הקצה של הרשימה.

Java Iterator שלב nשלב-4

שלב 5: לאחר קריאת האלמנט האחרון אם נריץ את קטע הקוד שלהלן הוא מחזיר ערך שקר.

cityIterator.hasNext();

Java Iterator בסוף

כאשר הסמן של איטרטור מצביע על הרכיב הסופי של הרשימה שאחרי hasNext() השיטה מחזירה ערך שקר.

פֶּתֶק: Java Iterator תומך רק באיטרציה של כיוון קדימה ולכן הוא ידוע בתור סמן חד-כיווני. לעומת זאת ListIterator הוא דו-כיווני המאפשר מעבר לשני הכיוונים.

Java-Ilterator-6Java 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 של מספרים שלמים ואז חוזרים דרכו באמצעות איטרטור ומסירים את כל המספרים האי-זוגיים. הוא מדפיס את הרשימה לפני ואחרי הסרת הרכיבים האי-זוגיים ומדפיס את הרשימה ששונתה עם מספרים זוגיים בלבד.