logo

Итератор в Java

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

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

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

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

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



за цикли java

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

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

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

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

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

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

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

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

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

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

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

Стъпка 1 на Java Iterator' loading='lazy' title=Стъпка-1

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

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

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

Стъпка 2 на Java Iterator' loading='lazy' title=Стъпка-2

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

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

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

Стъпка 3 на Java Iterator' loading='lazy' title=Стъпка-3


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

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

Java итератор Стъпка n' loading='lazy' title=Стъпка-4

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

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