Въведение в Iterator на Java

Итератор е интерфейс, който се използва за извличане на елементи един по един в колекция. Предлага се в пакет Java, наречен Java. пакет util. API за събиране реализира метода iterator () и следователно данните могат да бъдат извлечени от интерфейси като Map, List, Queue, Deque и Set, които са реализирани от рамката за събиране. Както подсказва името, итератор в Java повтаря чрез колекция от обекти.

Синтаксис:

Iterator iterator()

Под итератора е името на обект, създаден чрез извикване на метода iterator () на интерфейс за събиране. „Колекция“ е името на колекционния обект.

Iterator iter = collection.iterator();

Методи на итератор в Java

Итераторите имат 4 метода в Java, които се използват за преминаване през колекции и извличане на необходимата информация. Те са както следва:

  • hasNext (): Това е метод, който връща boolean true, ако итерацията има следващ елемент и boolean false, ако няма присъстващ елемент следващ.
  • next (): Този метод връща стойността на елемента, присъстваща в идните итерации. Да предположим, че няма елементи, които да бъдат върнати в следващата итерация, след това се изхвърля „NoSuchElementException“.
  • Remove (): Този метод премахва настоящия елемент, върнат от итератора от колекцията. В случай, че този метод бъде извикан предишен до next () метод, той изхвърля „IllegalStateException“.
  • forEachRemaining (): Този метод изпълнява операцията на всички останали елементи в колекцията, докато всички те не бъдат обработени или докато не бъде хвърлено изключение. Също така, това е метод, нововъведен от Oracle Corporation в тяхното издание на Java SE 8.

Пример за Iterator в Java

По-долу е примерът на Iterator в Java:

Код:

import java.io.*;
import java.util.*;
public class IteratorExample (
public static void main(String() args)
(
ArrayList val = new ArrayList();
val.add("Iteration started");
val.add("Printing iteration1");
val.add("Printing iteration2");
val.add("Printing iteration3");
val.add("End of iteration");
// Iterates through the list
Iterator iter = val.iterator();
System.out.println("The values of iteration are as follows: ");
while (iter.hasNext())
System.out.println(iter.next() + " ");
System.out.println();
)
)

изход:

Изключения, хвърлени от итераторски методи

В списък с елементи итераторът може да извлече информация само за съществуващите елементи. Той ще се срине или ще хвърли изключение, ако се опита да получи достъп до елемент, който не присъства в следващата итерация. Тук ще се запознаем с различните видове изключения, които получаваме при прилагането на методите на итератора.

1. следващ () метод

Докато итритирате чрез набор от елементи и ги извличате по този метод, може да се получи следното изключение.

  • NoSuchElementException: Това се случва, ако next () се опита да извлече елемент, който не съществува в този списък. Следователно винаги трябва да се използва hasNext (), преди да извикате next ().

2. метод за премахване ()

Има два вида изключения, които могат да се появят тук:

  • IllegalStateException: Ако методът remove () се извика преди следващия () метод, тогава това изключение се хвърля. Това е така, защото методът се опитва да премахне елемент, който все още не е посочен от метода next () и следователно се проваля. За да разрешите това изключение, следващият () трябва да бъде извикан, за да се обърне към първия елемент и след това премахване () може да бъде повикан, за да премахнете същото от списъка.
  • UnsupportedOperationException: Това изключение обикновено се хвърля, когато се опитвате да модифицирате списък с обект чрез добавяне или премахване на операция, която не поддържа модификация. Например, когато масивът се опитва да конвертира в списък от Arrays.asList хвърля това изключение. Това е така, защото обектът List ще има фиксиран размер, тъй като е създаден от обвивката от ArrayList и следователно модификацията няма да бъде разрешена. За да разрешите този проблем, преобразувайте Arrays.asList в ArrayList или LinkedList обекта, преди да извършите каквито и да е операции като добавяне / премахване на същия.

Синтаксис:

//ArrayList is created from the list having fixed size
list = new ArrayList(list);
Iterator iter = list.iterator();
while(iter.hasNext())(
if( iter.next().equals("First iteration") )(
iter.remove();
)
)

Методи на ListIterator

Тези методи позволяват на итератора да премине в двете посоки на обекта за събиране. Следват някои от тях:

  • add (): Този метод вмъква дадената стойност на обекта и се връща, когато бъде извикан следващият () метод.
  • hasNext (): Този метод е същият като този, споменат в типовете итератор, който връща Boolean true / false в зависимост от това дали следващият елемент има стойност или не.
  • hasPrevious (): Този метод е противоположен на hasNext () и връща Boolean true, ако списъкът има предишен елемент и обратно.
  • next (): Този метод извлича следващия елемент от дадения списък.
  • предишен (): Този метод извлича предишния елемент от списъка.
  • delete (): Изтрива настоящия елемент от списъка. Когато този метод бъде извикан или преди следваща () или предишна () функция, той хвърля „IllegalStateException“.

Пример за ListIterator

По-долу е даден пример в ArrayList за ListIterator.

Код:

import java.util.*;
public class IteratorExample (
public static void main(String args()) (
// Creating an array list
ArrayList array = new ArrayList();
// add elements to the array list
array.add("First element");
array.add("Second element");
array.add("Third element");
array.add("Fourth element");
array.add("Fifth element");
array.add("Sixth element");
// Displaying elements of an array
System.out.println("Printing input of the array: ");
Iterator iter = array.iterator();
while(iter.hasNext()) (
Object value = iter.next();
System.out.println(value + " ");
)
System.out.println();
// To update the elements of iteration
ListIterator listiter = array.listIterator();
while(listiter.hasNext()) (
Object value = listiter.next();
listiter.set(value + "+");
)
System.out.print("Updated array elements are as follows: ");
iter = array.iterator();
while(iter.hasNext()) (
Object value = iter.next();
System.out.print(value + " ");
)
System.out.println("\n");
// To display the contents in backward direction
System.out.println("Printing elements in backward direction: ");
while(listiter.hasPrevious()) (
Object value = listiter.previous();
System.out.print(value + " ");
)
System.out.println();
)
)

изход:

Предимства на Iterators в Java

По-долу са предимствата на Iterators:

  1. Той поддържа всички класове в интерфейса на Collection.
  2. Методите на итератора са доста прости и лесни за разбиране и изпълнение.
  3. Елементите на колекция могат лесно да бъдат модифицирани (добавяне / премахване) с помощта на Iterators.
  4. Достъпът до елементи чрез Iterators няма да доведе до изключения по време на изпълнение.
  5. Обработката на данни е ефективна.
  6. Той може да повтаря едновременно над различни променливи, като отделно държи състоянието на итерация на всяка променлива.

Ограничения на Iterators в Java

По-долу са ограниченията на Iterators:

  1. Java итераторът може да итератира само в една посока, т.е.
  2. Не може да се използва за итерация между две различни структури от данни едновременно.
  3. Тя не може да се използва за обратно проследяване на елемент.
  4. Тя не позволява промяна на структурата на елемента да се повтаря, тъй като той съхранява позицията на него.
  5. В някои случаи може да е неефективно, ако преминаването през елементите е по-ефективно.

заключение

Итераторите са най-често използваният метод за извличане на елементи от интерфейса за събиране. Нарича се Universal Java Cursor, тъй като е приложим във всички класове на Collection.

Препоръчителен член

Това е ръководство за Iterator на Java. Тук обсъждаме методите и примерите на Iterator в Java, заедно с неговите Ограничения и предимства. Можете да разгледате и другите ни предложени статии, за да научите повече -

  1. Въведение в сортирането на Heap в Java
  2. Отмяна на Java (примери)
  3. Итератори в C # с предимства и недостатъци
  4. Топ 10 въпроса за интервю за Java Collection
  5. Хвърли срещу Хвърли | Топ 5 разлики, които трябва да знаете