Úvod do Iterátoru v Javě

Iterátor je rozhraní, které se používá k načítání prvků jeden po druhém v kolekci. Je k dispozici v balíčku Java s názvem Java. využít balíček. Kolekce API implementuje metodu iterator (), a proto lze data získat z rozhraní, jako jsou Map, List, Queue, Deque a Set, které jsou všechny implementovány z rámce kolekce. Jak název napovídá, iterátor v Java iteruje prostřednictvím kolekce objektů.

Syntax:

Iterator iterator()

Pod iterátorem je název objektu vytvořeného voláním metody iterator () rozhraní kolekce. „Collection“ je název objektu kolekce.

Iterator iter = collection.iterator();

Metody Iterátoru v Javě

Iterátory mají v Java čtyři metody, které se používají k procházení sbírek a získávání požadovaných informací. Jsou to následující:

  • hasNext (): Toto je metoda, která vrací boolean true, pokud iterace obsahuje další prvek a boolean false, pokud není přítomen žádný element.
  • next (): Tato metoda vrací hodnotu prvku přítomnou v nadcházející iteraci. Předpokládejme, že v další iteraci nejsou vráceny žádné prvky, je vyvolána „NoSuchElementException“.
  • remove (): Tato metoda odstraní přítomný prvek vrácený iterátorem ze sbírky. V případě, že je tato metoda volána předchozí k další () metodě, vyvolá „IllegalStateException“.
  • forEachRemaining (): Tato metoda provádí operaci na všech zbývajících prvcích v kolekci, dokud nejsou všechny zpracovány nebo dokud není vyvolána výjimka. Toto je také metoda nově zavedená společností Oracle Corporation v jejich vydání Java SE 8.

Příklad Iterátoru v Javě

Níže je uveden příklad Iterátoru v Javě:

Kód:

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

Výstup:

Výjimky vyvolané metodami Iterator

V seznamu prvků může iterátor načíst informace pouze o existujících prvcích. Pokud dojde k pokusu o přístup k prvku, který není přítomen v další iteraci, dojde k chybě nebo vyvolání výjimky. Zde se seznámíme s různými druhy výjimek, které získáme při implementaci metod iterátoru.

1. další () metoda

Při iteraci sadou prvků a jejich vyvolání touto metodou může nastat následující výjimka.

  • NoSuchElementException: K tomu dochází, pokud se next () pokusí načíst prvek, který v tomto seznamu neexistuje. Proto musí být před voláním next () vždy použit hasNext ().

2. metoda remove ()

Zde se mohou vyskytnout 2 druhy výjimek:

  • IllegalStateException: Pokud je metoda remove () volána před metodou next (), je tato výjimka vyvolána. Důvodem je, že se metoda pokouší odebrat prvek, který ještě není určen další metodou (), a proto selže. Chcete-li tuto výjimku vyřešit, je třeba zavolat next (), aby odkazovala na první položku, a potom lze zavolat remove () a odstranit ji ze seznamu.
  • UnsupportedOperationException: Tato výjimka je obvykle vyvolána při pokusu o změnu objektu seznamu přidáním nebo odebráním operace, která nepodporuje změnu. Například když se pole pokusí převést do seznamu pomocí Arrays.asList, vyvolá tuto výjimku. Je to proto, že objekt List bude mít pevnou velikost, protože je vytvořen obalem z ArrayList, a proto nebude povolena změna. Chcete-li tento problém vyřešit, převeďte objekt Arrays.asList na objekt ArrayList nebo LinkedList před provedením jakýchkoli operací, jako je přidání / odebrání.

Syntax:

//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 ListIterator

Tyto metody umožňují iterátoru procházet oběma směry objektu kolekce. Následuje několik z nich:

  • add (): Tato metoda vloží danou hodnotu objektu a je vrácena při vyvolání metody next ().
  • hasNext (): Tato metoda je stejná jako metoda uvedená v typech iterátorů, která vrací booleovskou hodnotu true / false v závislosti na tom, zda má další prvek hodnotu nebo ne.
  • hasPrevious (): Tato metoda je opačná k hasNext () a vrací Boolean true, pokud má seznam předchozí prvek a naopak.
  • next (): Tato metoda načte další prvek z daného seznamu.
  • previous (): Tato metoda načte předchozí prvek ze seznamu.
  • remove (): Tímto se odstraní aktuální prvek ze seznamu. Pokud je tato metoda volána před funkcí next () nebo previous (), vyvolá „IllegalStateException“.

Příklad pro ListIterator

Níže je uveden příklad v ArrayList for ListIterator.

Kód:

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

Výstup:

Výhody Iterátorů v Javě

Níže jsou uvedeny výhody Iterátorů:

  1. Podporuje všechny třídy v rozhraní Collection.
  2. Metody iterátoru jsou poměrně jednoduché a snadno pochopitelné a implementovatelné.
  3. Prvky kolekce lze snadno modifikovat (přidat / odebrat) pomocí Iterátorů.
  4. Přístup k prvkům prostřednictvím Iterátorů nepovede k výjimkám za běhu.
  5. Zpracování dat je efektivní.
  6. Může iterovat současně různé proměnné tím, že drží iteraci každé proměnné samostatně.

Omezení Iterátorů v Javě

Níže jsou uvedena omezení Iterátorů:

  1. Java iterátor může iterovat pouze jedním směrem, tj. Směrem vpřed.
  2. Nelze jej použít k iteraci mezi dvěma různými datovými strukturami současně.
  3. Nelze použít k zpětnému sledování prvku.
  4. Nepovoluje změnu struktury prvku, který je iterován, protože ukládá jeho polohu.
  5. Mohlo by to být v některých případech neefektivní, protože přímý průchod prvky je účinnější.

Závěr

Iterátory jsou nejčastěji používanou metodou načítání prvků ze sběrného rozhraní. Jmenuje se Universal Java Cursor, protože je použitelný ve všech třídách Kolekce.

Doporučený článek

Toto je průvodce Iteratorem v Javě. Zde diskutujeme metody a příklady Iterátoru v Javě spolu s jeho omezeními a výhodami. Další informace naleznete také v dalších navrhovaných článcích -

  1. Úvod do řazení haldy v Javě
  2. Přepisování v Javě (příklady)
  3. Iterátory v C # s výhodami a nevýhodami
  4. Top 10 otázek rozhovoru Java Collection
  5. Throw vs Throw | 5 hlavních rozdílů, které byste měli vědět

Kategorie: