java iterator learn use iterators java with examples
V tej vadnici bomo izvedeli več o iteratorjih v Javi. Podrobno bomo razpravljali o vmesnikih Iterator in ListIterator v Javi:
Vse o okolju Java Collection Framework in njegovih različnih podpornih vmesnikih in razredih smo raziskali v enem od naših prejšnjih vadnic.
Ko imate zbirko, želite dostopati do njenih elementov, dodati / odstraniti ali obdelati elemente. Če želite vso to obdelavo opraviti s programom Java, bi morali imeti možnost, da se premikate po zbirki, ki jo uporabljate. Tu pride do slike iterator.
Kaj se boste naučili:
- Kaj je Java Iterator?
- Zaključek
Kaj je Java Iterator?
V Javi je Iterator konstrukcija, ki se uporablja za prehod ali prehod skozi zbirko.
Če želite uporabiti Iterator, morate iterator objekt dobiti s pomočjo ' iterator () ' metoda vmesnika za zbiranje. Java Iterator je zbirni vmesnik in je del paketa 'java.util'. Z uporabo Java Iteratorja lahko ponavljate zbirko predmetov.
Vmesnik Java Iterator nadomešča preštevalnik, ki je bil prej uporabljen za prehod skozi nekatere preproste zbirke, kot so vektorji.
Glavne razlike med Java Iterator in Enumerator so:
- Znatno izboljšanje imen metod.
- Elemente metode lahko odstranite iz zbirke, ki jo prečkate s pomočjo iteratorja.
V tej vadnici bomo razpravljali o podrobnostih vmesnika Iterator in vmesnika ListIterator, ki je dvosmerni vmesnik.
Vrste iteratorjev
- Števec
- Iterator
- ListIterator
Števec se zdaj redko uporablja. Zato se bomo v naših vajah osredotočili na vmesnika Iterator in ListIterator.
Iterator vmesnik v Javi
Vmesnik Iterator v Javi je del ogrodja zbirk v paketu 'java.util' in je kazalka, s katero lahko korakate po zbirki predmetov.
Vmesnik Iterator ima naslednje glavne značilnosti:
- Vmesnik Iterator je na voljo od zbirke Java 1.2 naprej.
- En za drugim prečka zbirko predmetov.
- Popularno znan kot 'Universal Java Cursor', saj deluje z vsemi zbirkami.
- Ta vmesnik podpira operacije branja in odstranjevanja, tj. Element lahko med iteracijo odstranite s pomočjo iteratorja.
Splošna predstavitev vmesnika Iterator je podana spodaj:

Nato si oglejmo zgoraj naštete metode Iterator.
Iteratorske metode
Vmesnik Iterator podpira naslednje metode:
# 1) Naprej ()
Prototip: E naslednji ()
Parametri: brez parametrov
Vrnitev: E -> element
Opis: Vrne naslednji element v zbirki.
Če iteracija (zbirka) nima več elementov, potem vrže NoSuchElementException .
# 2) hasNext ()
Prototip: logična hasNext ()
Parametri: NIL
Vrnitev: true => v zbirki so elementi.
False => ni več elementov
Opis: Funkcija hasNext () preveri, ali je v zbirki več elementov, do katerih dostopate s pomočjo iteratorja. Če elementov ni več, potem ne pokličete metode next (). Z drugimi besedami, s to funkcijo lahko določimo, ali naj se pokliče metoda next ().
# 3) odstrani ()
Prototip: odstrani praznino ()
Parametri: NIL
Vrnitev: NIL
Opis: Odstrani zadnji element, ki ga je iterator vrnil skozi iteracijo nad osnovno zbirko. Metodo remove () je mogoče poklicati samo enkrat na naslednji () klic.
Če iterator ne podpira odstranjevanja, vrže UnSupportedOperationException . Meče IllegalStateException če naslednja metoda še ni poklicana.
# 4) forEachRemaining ()
Prototip: void forEachRemaining (potrošnik super JE > akcija)
Parametri: dejanje => dejanje, ki ga je treba izvesti
Vrnitev: praznino
Opis: Izvede določeno dejanje na vsakem od preostalih elementov zbirke, dokler niso vsi elementi izčrpani ali dejanje vrže izjemo. Izjeme, vržene z dejanjem, se razširijo na klicatelja.
Če je dejanje nično, se sproži nullPointerException . Ta funkcija je nov dodatek vmesniku Iterator v Javi 8.
Primer Java Iteratorja
Izvedimo program Java, ki bo prikazal uporabo vmesnika Iterator. Naslednji program ustvari ArrayList cvetja. Nato dobi iterator z uporabo metode iterator () v ArrayList. Po tem se prečka seznam, da se prikaže vsak element.
import java.util.*; public class Main { public static void main(String() args) { List flowers = new ArrayList(); flowers.add('Rose'); flowers.add('Jasmine'); flowers.add('sunflower'); // Get Iterator IteratorflowersIterator = flowers.iterator(); System.out.println('Contents of ArrayList:'); // Traverse elements using iterator while(flowersIterator.hasNext()){ System.out.print(flowersIterator.next() + ' '); } } } Izhod:

Omejitve vmesnika iteratorja
- Operacije zamenjave elementa ali dodajanja novega elementa s tem iteratorjem ni mogoče izvesti.
- Ponovitev poteka samo v eni smeri, to je naprej.
- Podpira samo zaporedno ponovitev.
- Kadar je treba ponoviti velike količine podatkov, to vpliva na delovanje Iteratorja.
Iterator VsPonovljivo
Čeprav se vmesnika Iterable in Iterator slišita podobno, sta si popolnoma različna. Razred, ki izvaja vmesnik Iterable, pridobi možnost iteracije nad predmeti razreda, ki uporabljajo vmesnik iteratorja.
Spodaj je nekaj glavnih razlik med tema dvema vmesnikoma, ki se jih morate zavedati:
| Iterable vmesnik | Iterator vmesnik |
|---|---|
| Predstavlja zbirko, ki jo je mogoče obiskati z zanko foreach. | Omogoča iteracijo nad drugo zbirko. |
| Razred, ki izvaja iterabilni vmesnik, mora preglasiti metodo iterator (). | hasNext () in next () metode vmesnika Iterator naj preglasi razred, ki ga izvaja. |
| Ne shrani trenutnega stanja. | Shrani trenutno stanje ponovitve. |
| Primerek vmesnika iteratorja je treba izdelati vsakič, ko pokličete metodo iterator (). | Za vmesnik iteratorja ni takšne pogodbe. |
| Premika se samo v smeri naprej. | Premika se v smeri naprej in podvmesniki, kot je listIterator, podpirajo dvosmerno prečkanje. |
| Ne ponuja nobene metode za spreminjanje elementov med ponovitvijo. | Ponuja metodo odstranjevanja, ki lahko odstrani element, ko poteka ponovitev. |
ListIterator vmesnik v Javi
Vmesnik ListIterator je podvmesnik vmesnika iteratorja. Deluje na zbirkah vrst seznamov, kot so Linkedlists, matrični seznami itd. Tako ta vmesnik premaga pomanjkljivosti vmesnika Iterator.
Glavne značilnosti vmesnika ListIterator vključujejo:
- ListIterator vmesnik razširja vmesnik Iterator.
- ListIterator vmesnik podpira CRUD operacije, tj.Ustvari, preberi, posodobi in izbriši.
- Podpira ponovitev v smeri naprej in nazaj.
- Ker je ta vmesnik dvosmeren, je kazalec vedno nameščen med prejšnjim in naslednjim elementom.
- Ta vmesnik deluje predvsem za izvedbe seznamov, kot so ArrayList, LinkedList itd.
- Na voljo od Jave 1.2
Vmesnik ListIterator je predstavljen, kot je prikazano spodaj:

Kot smo že omenili, vmesnik ListIterator razširja vmesnik Iterator. Tako poleg podpore vseh metod vmesnika iteratorja, kot je prikazano zgoraj, vmesnik ListIterator ima tudi lastne metode, ki mu pomagajo pri izvajanju CRUD operacij in dvosmerni ponovitvi.
Podrobno se pogovorimo o metodah ListIterator.
Metode ListIterator
Upoštevajte, da metode vmesnika Iterator, next (), hasNext () in remove (), delujejo natančno na enak način kot vmesnik ListIterator. Zato bomo v tem poglavju te metode preskočili. Poleg zgoraj omenjenih metod ima ListIterator naslednje metode -
Prejšnji ()
Prototip: E prejšnja ()
Parametri: NIL
Vrnitev:
E- prejšnji element na seznamu.
- 1 - če je iterator na začetku seznama.
Opis: Ta funkcija vrne prejšnji element na seznamu. Ko se vrne prejšnji element, se kazalec premakne nazaj na naslednji element.
hasPrevious ()
Prototip: boolean hasPrevious ()
Parametri: NIL
Vrnitev: true => iterator ima več elementov, ko je seznam obrnjen nazaj.
Opis: Ta funkcija preveri, ali ima ListIterator več elementov v smeri nazaj.
previousIndex
Prototip: int previousIndex ()
Parametri: NIL
Vrnitev:
int - indeks prejšnjega elementa
- 1 - če je kazalec na začetku seznama.
Opis: Vrne indeks prejšnjega elementa, ki ga vrne prejšnji () klic.
nextIndex
Prototip: int nextIndex ()
Parametri: NIL
Vrnitev:
int - naslednji indeks
- 1 - če je iterator na koncu seznama.
Opis: Vrne naslednji indeks elementa na seznamu. Ta element vrne klic metode next ().
set ()
Prototip: prazen niz (E in)
Parametri: e - element, ki ga je treba zamenjati
Vrnitev: NIL
Opis: Uporablja se za zamenjavo zadnjega elementa z danim elementom e.
dodaj ()
Prototip: void add (E e)
Parametri: e - element, ki ga je treba dodati
Vrnitev: NIL
Opis: Na seznam doda nove elemente na mestu pred elementom naslednjega () elementa.
Primer Iteratorja seznama
Zdaj vemo, kaj je ListIterator in katere različne metode podpira. Nadaljujmo in uvedimo program Java za predstavitev ListIterator.
V tem programu smo uporabili ArrayList. Nato z metodami ListIterator prehodimo seznam v smeri naprej in nazaj ter prikažemo izhodne podatke.
import java.util.*; class Main { public static void main(String args()) { Listnum_list = new ArrayList(); // Add Elements to ArrayList num_list.add(1); num_list.add(3); num_list.add(5); num_list.add(7); num_list.add(9); // Creatinge a ListIterator ListIteratorlist_it = num_list.listIterator(); System.out.println('Output using forward iteration:'); while (list_it.hasNext()) System.out.print(list_it.next()+' ') ; System.out.print('
Output using backward iteration:
') ; while (list_it.hasPrevious()) System.out.print(list_it.previous()+' '); } } Izhod:

Do sedaj smo razpravljali o vmesnikih, iteratorju in Listiteratorju, nato bomo videli različne primere uporabe teh vmesnikov za prehod različnih zbirk. Najprej pa si oglejmo prečkanje preprostih nizov in nato preidimo na druge zbirke.
Polje Iterator
V Javi obstajata dva načina ponovitve elementov matrike. Opišimo načine na primerih kode.
# 1) za zanko
To je najpreprostejši način ponavljanja po matriki. Uporabljamo preprosto for zanko, ki bo z vsako ponovitvijo indeksa povečala in prikazala njegovo vsebino.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for loop:'); for (int i = 0; i Izhod:

Zgornji program prikazuje vsebino polja z zanko for.
# 2) forEach zanka
To je drugi način ponovitve po nizih. Tu uporabljamo specializirano zanko for ali zanko ‘forEach’. Tu za vsakega elementa preletimo matriko in nato prikažemo vsebino.
import java.util.*; public class Main { public static void main(String() args) { int myArray() = {2,4,6,8,10,12,14}; int num; System.out.println('Array contents using for each loop:'); for (int i :myArray) { // accessing each element of array num = i; System.out.print(num + ' '); } } } Izhod:

ForEach je bolj optimiziran v primerjavi z zanko for. Krajše je za tipkanje in tudi hitrejše.
ArrayList Iterator
Če želite prečkati zbirko ArrayList, lahko to storite z uporabo vmesnika Iterator. Ker je iterator vmesnik, ga ne morete neposredno ustvariti. Namesto tega lahko uporabite iterator () metode zbirke ArrayList, da dobite iterator in nato prehodite seznam.
Iterator iteratorja ();
Primer za prikaz ArrayList Iterator.
import java.util.*; public class Main { public static void main(String() args) { ArrayListmyList = new ArrayList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); Iteratorlist_it = myList.iterator(); System.out.println('Elements in the arrayList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } } Izhod:

Iterator LinkedList
Zdaj pa si oglejmo funkcionalnost iteratorja v primeru zbirke LinkedList.
Zbirka LinkedList podpira metodo listIterator (), ki vrne listIterator za prehod skozi povezani seznam.
Splošna oblika za to funkcijo je
ListIterator list_iter = LinkedList.listIterator (int indeks);
Tu je indeks celoštevilčna vrednost, ki določa položaj v zbirki povezanih seznamov, od koder naj se začne prehajanje.
Dovolite nam, da razumemo iterator seznama na povezanem seznamu z vzorčnim programom. Spremenili smo isti program iterator matrike in ga spremenili tako, da vsebuje listiterator s LinkedList.
import java.util.*; public class Main { public static void main(String() args) { LinkedListmyList = new LinkedList(); myList.add('Red'); myList.add('Green'); myList.add('Blue'); myList.add('Brown'); myList.add('Pink'); myList.add('Purple'); ListIteratorlist_it = myList.listIterator(0); System.out.println('Elements in the LinkedList:'); while(list_it.hasNext()) System.out.print(list_it.next() + ' '); } } Izhod:
orodja za preizkušanje prijetnih spletnih storitev

Java Map / Hashmap Iterator
Zemljevid ali njegove različice, kot so hashmap, treemap itd., Niso zbirke. Zato na njem ne morete neposredno uporabiti metode iteratorja. Namesto tega morate prebrati vrednosti vnosa ključa, da preberete pare ključ / vrednost.
Čeprav lahko uporabite različne metode, kot so forEach, for loop itd., Da iterirate vrednosti zemljevida, je uporaba iteratorja za ponovitev ključnih vrednosti najboljša in učinkovita metoda. Poleg tega lahko tudi z iteracije z zemljevida odstranite vnose z metodo odstranjevanja.
Primer uporabe Iteratorja s HashMapom.
import java.util.*; class Main { public static void main(String() arg) { MapmyMap = new HashMap(); // enter name/url pair myMap.put(1, 'India'); myMap.put(2, 'Nepal'); myMap.put(3, 'Maldives'); myMap.put(4, 'SriLanka'); System.out.println(' SAARC Member Countries '); System.out.println(' KEY' + ' ' + ' COUNTRY' ); // using iterators Iteratormap_itr = myMap.entrySet().iterator(); while(map_itr.hasNext()) { Map.Entrymap_entry = map_itr.next(); System.out.println(' ' + map_entry.getKey() + ' ' + map_entry.getValue()); } } } Izhod:

V zgornjem programu smo definirali zemljevid s celoštevilskimi ključi in vrstami nizov. Nato določimo iterator nad zemljevidom. Vnesite in prikažite pare ključ / vrednost.
Java Set Iterator
Metoda iterator () Java.util.set se uporablja za pridobivanje iteratorja, ki vrne elemente v nizu v naključnem vrstnem redu.
Iterator set_iterator = Set.iterator();“Set_iterator” se ponovi med različnimi elementi nabora in vrne njihove vrednosti.
Na podoben način hash set vsebuje tudi funkcijo iteratorja, ki vrne iterator kot iterator nabora.
Iterator hashset_iterator = Hash_Set.iterator(); Spodaj je prikazan primer programiranja za prikaz nastavljenega iteratorja.
import java.util.*; public class Main { public static void main(String args()) { HashSetsports_set = new HashSet(); sports_set.add('Hocky'); sports_set.add('Kabaddi'); sports_set.add('Football'); sports_set.add('Badminton'); sports_set.add('Cricket'); System.out.println('Sports HashSet: ' + sports_set); // Creating an iterator Iterator hashset_iter = sports_set.iterator(); // Displaying the values after iterating through the set System.out.println('
SportsSet iterator values:'); while (hashset_iter.hasNext()) { System.out.println(hashset_iter.next()); } } } Izhod:

Ta izvedba uporablja HetSet iterator in prikaže posamezne vrednosti s ponovitvijo elementov HashSet.
Iterator vs ListIterator
Naj tabelariziramo glavne razlike med vmesnikoma Iterator in ListIterator.
Iterator ListIterator Lahko prečka vse zbirke, vključno z nabori, zemljevidi itd. Uporablja se lahko za prehod samo po zbirki vrst seznamov, kot so ArrayList, LinkedList. Iteracija zbira samo v smeri naprej. Lahko pregleduje zbirko v smeri naprej in nazaj. Ne morem pridobiti indeksov. Lahko pridobi indekse. Zbirki ni mogoče dodati novih elementov. Zbirki lahko dodate nove elemente. Iterator ne more spreminjati elementov med ponovitvijo. ListIterator lahko spreminja elemente v zbirki z metodo set ().
Pogosto zastavljena vprašanja
V # 1) Kaj je iteracija v Javi?
Odgovor: Ponovitev je postopek, pri katerem se blok kode večkrat izvaja, dokler dani pogoj ne velja ali ne obstaja. Z uporabo iteracije lahko prečkate zaporedje elementov ali obdelate podatke.
V # 2) Koliko vrst iteratorjev je v Javi?
Odgovor: Iteratorji se uporabljajo za prehod po zbirkah v Javi.
V Javi obstajajo tri vrste iteratorjev:
- Preštevalci
- Iteratorji
- ListIterators
V # 3) Kako uporabim Iterator v Javi?
Odgovor: Če želite iterator uporabiti za prehod skozi zbirko, morate najprej iterator dobiti z metodo iterator () določene zbirke.
Nato lahko za pridobitev elementa uporabite metode hasNext () in next () iteratorja.
V # 4) Zakaj se Iterator uporablja namesto za zanko?
Odgovor: Tako iterator kot zanka for se uporabljata za večkratno izvajanje določenega bloka kode. Toda glavna razlika je v tem, da v zanki for ne morete spreminjati ali spreminjati vsebine zbirke. Tudi če ga poskusite spremeniti, bo vrgel concurrentModificationException. Z uporabo iteratorja lahko element odstranite iz zbirke.
V # 5) Zakaj potrebujemo Iterator v Javi?
Odgovor: Iterator vam pomaga pridobiti elemente v zbirki ali vsebniku, ne da bi programerju bilo treba poznati notranjo strukturo ali delovanje zbirke. So bolj elegantni, porabijo manj pomnilnika in tudi programerju je prihranjeno pri pisanju dolge kode.
Drugič, elemente je mogoče na kakršen koli način shraniti v zbirko, vendar jih lahko programer z iteratorjem pridobi tako kot seznam ali katero koli drugo zaporedje.
Zaključek
V tej vadnici smo razpravljali o iteratorjih v Javi, ki se uporabljajo z zbirkami. To znanje iteratorjev bo bralcem pomagalo razumeti zbirke, ki se jih bomo naučili v naslednjih vajah.
Priporočeno branje
- Vadnica Java vmesnika in abstraktnega razreda s primeri
- JAVA Vadnica za začetnike: 100+ praktičnih Javnih video vadnic
- Uvajanje Java: Ustvarjanje in izvajanje datoteke Java JAR
- Java 'this' ključna beseda: Vadnica s primeri kode
- Navidezni stroj Java: kako JVM pomaga pri zagonu aplikacije Java
- Dostopni modifikatorji v Javi - Vadnica s primeri
- Vadnica za refleksijo Java s primeri
- C ++ Vs Java: Top 30 razlik med C ++ in Java s primeri





