logo

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

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

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

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

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

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



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

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

גְבִיָהשמות = New ArrayList<>();
איטרטורitr = names.iterator();

cdr טופס מלא
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_' title=איטרטור-סמן

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

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

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

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

עבודה פנימית

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

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

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

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

Java Iterator שלב 1' loading='lazy' title=שלב-1

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

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

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

Java Iterator שלב 2' loading='lazy' title=שלב-2

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

java מכיל תת מחרוזת

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

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

Java Iterator שלב 3' loading='lazy' title=שלב-3


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

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

מספר אקראי gen java
Java Iterator שלב n' loading='lazy' title=שלב-4

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

cityIterator.hasNext();

Java Iterator בסוף' loading='lazy' title=

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

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

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