Итератор в Java

Итератор в Java

Итераторът в Java е един от най-често използваните курсори в Java Collections Framework . Използва се за преминаване или итерация през елементи от колекция един по един.

  • Използва се за преминаване на елементи само в посока напред.
  • Премахва безопасно елементи по време на обхождане с помощта на remove().
  • Итераторът е универсален курсор, който се прилага за всички типове колекции — List Set и Queue.

Декларация на итератор

итератор на публичен интерфейс

Тук E представлява типа елементи, които трябва да бъдат итерирани.

Създаване на обект на итератор

Обект 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_Итератор-курсор

Методи на итераторния интерфейс

Итераторният интерфейс дефинира три метода, както са изброени по-долу:

  • hasNext(): Връща true, ако итерацията има повече елементи.
  • следващ(): Връща следващия елемент в повторението. Хвърля се NoSuchElementException ако няма повече елемент.
  • премахване (): Премахва последния елемент, върнат от next(). Този метод може да бъде извикан само веднъж на извикване на next().

Забележка : методът remove() може да генерира две изключения, а именно както следва:

Вътрешна работа

В този раздел ще се опитаме да разберем как Java Iterator и неговите методи работят вътрешно. Нека вземем следния обект LinkedList, за да разберем тази функционалност.

Стъпка 1: Сега нека създадем обект Iterator върху обекта List, както е показано по-долу:

Итератор citiesIterator = градове.iterator();

Итераторът 'citiesIteartor' ще изглежда по-долу:

Стъпка 1 на Java IteratorСтъпка-1

Тук курсорът на итератора сочи преди първия елемент от списъка.

Стъпка 2: Сега ще изпълним следния кодов фрагмент.

citiesIterator.hasNext();
градовеIterator.next();

Стъпка 2 на Java IteratorСтъпка-2

Когато стартираме горния кодов фрагмент, курсорът на итератора сочи към първия елемент в списъка, както е показано на горната диаграма.

Стъпка 3: Сега ще изпълним следния кодов фрагмент.

citiesIterator.hasNext();
градовеIterator.next();

Стъпка 3 на Java IteratorСтъпка-3


Когато стартираме горния кодов фрагмент, курсорът на итератора сочи към втория елемент в списъка, както е показано на горната диаграма.

Стъпка 4: Направете този процес, за да достигнете курсора на итератора до крайния елемент на списъка.

Java итератор Стъпка nСтъпка-4

Стъпка 5: След като прочетем последния елемент, ако изпълним кодовия фрагмент по-долу, той връща невярна стойност.

citiesIterator.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 от цели числа, след което го итерираме с помощта на итератор и премахваме всички нечетни числа. Той отпечатва списъка преди и след премахването на нечетните елементи и отпечатва модифицирания списък само с четни числа.