Wprowadzenie do Iteratora w Javie

Iterator to interfejs służący do pobierania elementów jeden po drugim w kolekcji. Jest dostępny w pakiecie Java o nazwie Java. pakiet utylizacji. Interfejs API kolekcji implementuje metodę iterator (), a zatem dane mogą być pobierane z interfejsów takich jak Map, List, Queue, Deque i Set, które wszystkie są zaimplementowane ze struktury kolekcji. Jak sama nazwa wskazuje, iterator w Javie iteruje kolekcję obiektów.

Składnia:

Iterator iterator()

Pod iteratorem znajduje się nazwa obiektu utworzonego przez wywołanie metody interfejsu kolekcji iterator (). „Kolekcja” to nazwa obiektu kolekcji.

Iterator iter = collection.iterator();

Metody iteratora w Javie

Iteratory mają 4 metody w Javie, które są używane do przechodzenia między kolekcjami i pobierania wymaganych informacji. Są to:

  • hasNext (): Jest to metoda, która zwraca boolean true, jeśli iteracja ma następny element, a boolean false, jeśli nie ma następnego elementu.
  • next (): Ta metoda zwraca wartość elementu obecną w nadchodzącej iteracji. Załóżmy, że w następnej iteracji nie ma elementów, które zostaną zwrócone, a następnie zgłoszony zostanie wyjątek „NoSuchElementException”.
  • remove (): Ta metoda usuwa obecny element zwrócony przez iterator z kolekcji. W przypadku wywołania tej metody przed metodą next () wyrzuca „IllegalStateException”.
  • forEachRemaining (): Ta metoda wykonuje operację na wszystkich pozostałych elementach w kolekcji, dopóki wszystkie nie zostaną przetworzone lub dopóki nie zostanie zgłoszony wyjątek. Jest to także metoda nowo wprowadzona przez Oracle Corporation w wersji Java SE 8.

Przykład Iteratora w Javie

Poniżej znajduje się przykład Iteratora w Javie:

Kod:

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();
)
)

Wynik:

Wyjątki zgłoszone przez metody Iterator

Na liście elementów iterator może pobierać informacje tylko o istniejących elementach. Wystąpi awaria lub wyrzuci wyjątek, jeśli spróbujesz uzyskać dostęp do elementu, którego nie ma w następnej iteracji. W tym miejscu poznamy różne wyjątki występujące podczas implementacji metod iteratora.

1. metoda next ()

Podczas iteracji przez zestaw elementów i pobierania ich za pomocą tej metody może wystąpić następujący wyjątek.

  • NoSuchElementException: Dzieje się tak, gdy next () próbuje pobrać element, który nie istnieje na bieżącej liście. Dlatego zawsze należy użyć hasNext () przed wywołaniem next ().

2. metoda remove ()

Istnieją dwa rodzaje wyjątków, które mogą wystąpić tutaj:

  • IllegalStateException: Jeśli metoda remove () zostanie wywołana przed metodą next (), zgłoszony zostanie ten wyjątek. Wynika to z faktu, że metoda próbuje usunąć element, który nie jest jeszcze określony przez metodę next (), a zatem nie powiedzie się. Aby rozwiązać ten wyjątek, należy wywołać metodę next (), aby odwołać się do pierwszego elementu, a następnie wywołać metodę remove (), aby usunąć to samo z listy.
  • UnsupportedOperationException: Ten wyjątek jest zwykle zgłaszany podczas próby modyfikacji obiektu listy przez operację dodawania lub usuwania, która nie obsługuje modyfikacji. Na przykład, gdy tablica próbuje przekonwertować na listę przez Arrays.asList zgłasza ten wyjątek. Wynika to z faktu, że obiekt List będzie miał stały rozmiar, ponieważ jest tworzony przez opakowanie z ArrayList, a zatem modyfikacja nie będzie dozwolona. Aby rozwiązać ten problem, przekonwertuj Arrays.asList na obiekt ArrayList lub LinkedList przed wykonaniem jakichkolwiek operacji, takich jak dodawanie / usuwanie na tym samym.

Składnia:

//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();
)
)

Metody ListIteratora

Te metody umożliwiają iteratorowi przechodzenie w obu kierunkach obiektu kolekcji. Oto niektóre z nich:

  • add (): Ta metoda wstawia podaną wartość obiektu i jest zwracana po wywołaniu metody next ().
  • hasNext (): Ta metoda jest taka sama jak ta wymieniona w typach iteratora, która zwraca wartość logiczną prawda / fałsz w zależności od tego, czy następny element ma wartość, czy nie.
  • hasPrevious (): Ta metoda jest przeciwna do hasNext () i zwraca wartość logiczną true, jeśli lista zawiera poprzedni element i odwrotnie.
  • next (): Ta metoda pobiera następny element z podanej listy.
  • previous (): Ta metoda pobiera poprzedni element z listy.
  • remove (): Usuwa obecny element z listy. Wywołanie tej metody przed funkcją next () lub previous () powoduje zgłoszenie „IllegalStateException”.

Przykład dla ListIterator

Poniżej znajduje się przykład w ArrayList dla ListIterator.

Kod:

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();
)
)

Wynik:

Zalety Iteratorów w Javie

Poniżej znajdują się zalety Iteratorów:

  1. Obsługuje wszystkie klasy w interfejsie Collection.
  2. Metody iteratora są dość proste i łatwe do zrozumienia i wdrożenia.
  3. Elementy kolekcji można łatwo modyfikować (dodawać / usuwać) za pomocą Iteratorów.
  4. Dostęp do elementów za pośrednictwem iteratorów nie spowoduje wyjątków w czasie wykonywania.
  5. Przetwarzanie danych jest wydajne.
  6. Może iterować różne zmienne jednocześnie, utrzymując stan iteracji każdej zmiennej osobno.

Ograniczenia iteratorów w Javie

Poniżej znajdują się ograniczenia Iteratorów:

  1. Iterator Java może iterować tylko w jednym kierunku, tj. Do przodu.
  2. Nie można go używać do iteracji między dwiema różnymi strukturami danych jednocześnie.
  3. Nie można go użyć do śledzenia elementu.
  4. Nie pozwala na modyfikację struktury iterowanego elementu, ponieważ przechowuje on jego pozycję.
  5. W niektórych przypadkach może być nieefektywny, gdy przejście bezpośrednio przez elementy jest bardziej wydajne.

Wniosek

Iteratory są najczęściej stosowaną metodą pobierania elementów z interfejsu kolekcji. Nazywa się Universal Java Cursor, ponieważ ma zastosowanie we wszystkich klasach Collection.

Polecany artykuł

To jest przewodnik po Iteratorze w Javie. Tutaj omawiamy metody i przykłady Iteratora w Javie wraz z jego ograniczeniami i zaletami. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. Wprowadzenie do Heap Sort w Javie
  2. Przesłanianie w Javie (przykłady)
  3. Iteratory w języku C # z zaletami i wadami
  4. 10 najważniejszych pytań do wywiadu z kolekcji Java
  5. Rzut vs Rzuty | 5 najważniejszych różnic, które powinieneś znać