Uvod v Iterator na Javi

Iterator je vmesnik, ki se uporablja za pridobivanje elementov drug za drugim v zbirki. Na voljo je v paketu Java, ki se imenuje Java. paket util. API za zbiranje izvaja metodo iterator (), zato je mogoče podatke pridobiti iz vmesnikov, kot so Map, List, Queue, Deque in Set, ki so vsi izvedeni iz okvira zbiranja. Kot že ime pove, iterator na Javi ponavlja skozi zbirko predmetov.

Sintaksa:

Iterator iterator()

Spodaj iterator je ime predmeta, ustvarjenega s klicanjem metode iterator () vmesnika za zbiranje. "Collection" je ime predmeta zbiranja.

Iterator iter = collection.iterator();

Metode Iteratorja na Javi

Iteratorji imajo na Javi štiri načine, s katerimi se premikajo po zbirkah in pridobivajo zahtevane informacije. To so:

  • hasNext (): To je metoda, ki vrne logično vrednost true, če ima iteracija naslednji element in boolean false, če ni naslednji element.
  • next (): Ta metoda vrne vrednost elementa, ki je prisotna v prihodnji iteraciji. Predpostavimo, da ni elementov, ki bi jih bilo treba vrniti v naslednji ponovitvi, potem se vrže "NoSuchElementException".
  • remove (): Ta metoda odstrani sedanji element, ki ga iterator vrne iz zbirke. V primeru, da se ta metoda imenuje predhodna do naslednja () metoda, vrže "IllegalStateException".
  • forEachRemaining (): Ta metoda izvede operacijo na vseh preostalih elementih v zbirki, dokler niso vsi obdelani ali dokler se ne vrže izjema. To je tudi metoda, ki jo je korporacija Oracle na novo predstavila v izdaji Java SE 8.

Primer Iteratorja na Javi

Spodaj je primer Iteratorja na Javi:

Koda:

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

Izhod:

Izjeme, ki jih je vrgla Iteratorjeva metoda

Na seznamu elementov lahko iterator pridobi informacije samo o obstoječih elementih. Izjema bo ali vrgel izjemo, če poskusite dostopati do elementa, ki ni prisoten v naslednji iteraciji. Tu bomo spoznali različne vrste izjem, ki jih dobimo med izvajanjem metod iteratorja.

1. naslednja () metoda

Med iteracijo skozi niz elementov in njihovo pridobivanje po tej metodi se lahko zgodi naslednja izjema.

  • NoSuchElementException: To se zgodi, če next () poskuša pridobiti element, ki na tem seznamu ne obstaja. Zato je vedno treba uporabiti hasNext (), preden pokličete naslednji ().

2. metoda remove ()

Tu se lahko zgodita dve izjemi:

  • IllegalStateException: Če se metoda remove () pokliče pred naslednjo () metodo, potem se ta izjema vrže. To je zato, ker metoda poskuša odstraniti element, ki še ni določen z naslednjo () metodo, in zato ne uspe. Če želite razrešiti to izjemo, morate poklicati naslednjo (), da se sklicuje na prvi element, nato pa odstranite (), če želite isto odstraniti s seznama.
  • UnsupportedOperationException: Ta izjema se običajno vrže pri poskusu spreminjanja seznama s postopkom dodajanja ali odstranjevanja, ki ne podpira sprememb. Na primer, ko matrika poskuša pretvoriti v seznam s strani Arrays.asList, vrže to izjemo. To je zato, ker bo predmet List imel fiksno velikost, saj ga je ustvaril ovoj iz ArrayList-a, zato spremembe ne bodo dovoljene. Če želite rešiti to težavo, pretvorite Arrays.asList v ArrayList ali LinkedList predmet, preden izvedete kakršne koli operacije, kot je dodajanje / odstranjevanje na istem.

Sintaksa:

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

Metode ListIteratorja

Te metode omogočajo iteratorju, da se poda v obe smeri predmeta zbiranja. Sledi nekaj:

  • add (): Ta metoda vstavi dano vrednost predmeta in se vrne, ko se pokliče naslednja () metoda.
  • hasNext (): Ta metoda je enaka tisti, ki je omenjena v vrstah iteratorja, ki vrne Boolean true / false glede na to, ali ima naslednji element vrednost ali ne.
  • hasPrevious (): Ta metoda je nasprotna hasNext () in vrne Boolean true, če ima seznam prejšnji element in obratno.
  • next (): Ta metoda pridobi naslednji element s danega seznama.
  • previous (): Ta metoda pridobi prejšnji element s seznama.
  • remove (): Ta seznam zbriše s seznama. Ko se ta metoda pokliče pred naslednjo () ali prejšnjo () funkcijo, vrže "IllegalStateException".

Primer za ListIterator

Spodaj je primer v ArrayList za ListIterator.

Koda:

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

Izhod:

Prednosti Iteratorjev na Javi

Spodaj so prednosti iteratorjev:

  1. Podpira vse razrede v zbirki vmesnik.
  2. Metode iteratorja so precej preproste in jih je enostavno razumeti in izvajati.
  3. Elemente zbirke je mogoče enostavno spremeniti (dodati / odstraniti) s pomočjo Iteratorjev.
  4. Dostop do elementov prek Iteratorjev ne bo privedel do izjem med izvajanjem.
  5. Ravnanje s podatki je učinkovito.
  6. Ponavadi lahko iterati po različnih spremenljivkah, če ločeno drži stanje iteracije vsake spremenljivke.

Omejitve Iteratorjev na Javi

Spodaj so omejitve Iteratorjev:

  1. Java iterator lahko iterati le v eno smer, tj naprej.
  2. Ni ga mogoče uporabiti za iteracijo med dvema različnima podatkovnima strukturama hkrati.
  3. Ni ga mogoče uporabiti za nazaj element.
  4. Ne dovoljuje spreminjanja strukture elementa, ki se ponavlja, saj shranjuje položaj le-tega.
  5. V nekaterih primerih bi bil lahko neučinkovit, če bi bil prehod skozi elemente bolj učinkovit.

Zaključek

Iteratorji so najpogosteje uporabljeni način za pridobivanje elementov iz zbirčnega vmesnika. Imenuje se Universal Java Cursor, saj je uporaben v vseh razredih Collection.

Priporočeni članek

To je vodnik za Iterator na Javi. Tukaj razpravljamo o metodah in primerih Iteratorja v Javi, skupaj z njegovimi omejitvami in prednostmi. Če želite izvedeti več, lahko preberete tudi druge naše predlagane članke -

  1. Uvod v razvrščanje heap v Javi
  2. Prevladovanje v Javi (primeri)
  3. Iteratorji v C # s prednostmi in slabostmi
  4. Top 10 vprašanj o intervjuju z zbirko Java
  5. Vrzi proti metanju | Top 5 razlik, ki bi jih morali vedeti