java iterator learn use iterators java with examples
I denne veiledningen lærer vi om itteratorer i Java. Vi vil ha detaljert diskusjon om Iterator- og ListIterator-grensesnittene i Java:
Vi utforsket alt om Java Collection Framework og dets forskjellige støttegrensesnitt og klasser i en av våre tidligere opplæringsprogrammer.
Når du har en samling, vil du få tilgang til elementene, legge til / fjerne eller behandle elementene. For å gjøre all denne behandlingen gjennom et Java-program, bør du kunne krysse gjennom samlingen du bruker. Det er her iteratoren kommer inn i bildet.
Hva du vil lære:
- Hva er en Java Iterator?
- Konklusjon
Hva er en Java Iterator?
I Java er en Iterator en konstruksjon som brukes til å krysse eller gå gjennom samlingen.
For å bruke en Iterator, må du hente iteratorobjektet ved å bruke “ iterator () ” metoden for samlingsgrensesnittet. Java Iterator er et samlingsrammergrensesnitt og er en del av 'java.util' -pakken. Ved hjelp av Java Iterator kan du gjenta gjennom samlingen av objekter.
Java Iterator-grensesnitt erstatter telleren som ble brukt tidligere for å gå gjennom noen enkle samlinger som vektorer.
De største forskjellene mellom Java Iterator og Enumerator er:
- Betydelig forbedring av metodenavn.
- Du kan fjerne metodeelementer fra samlingen som blir krysset ved hjelp av en iterator.
I denne veiledningen vil vi diskutere detaljene i Iterator-grensesnittet og ListIterator-grensesnittet som er et toveis grensesnitt.
Iteratortyper
- Oppteller
- Iterator
- ListIterator
En teller brukes sjelden nå. Derfor vil vi i veiledningsserien fokusere på Iterator- og ListIterator-grensesnitt.
Iterator-grensesnitt i Java
Iterator-grensesnittet i Java er en del av Collections-rammeverket i pakken ‘java.util’ og er en markør som kan brukes til å gå gjennom samlingen av objekter.
Iterator-grensesnittet har følgende hovedegenskaper:
- Iterator-grensesnittet er tilgjengelig fra Java 1.2-samlingsrammeverket og utover.
- Den krysser samlingen av gjenstander en etter en.
- Populært kjent som “Universal Java Cursor” da det fungerer med alle samlinger.
- Dette grensesnittet støtter 'lese' og 'fjerne' operasjoner, dvs. du kan fjerne et element under en iterasjon ved hjelp av iteratoren.
Generell representasjon av Iterator-grensesnittet er gitt nedenfor:
Deretter, la oss ta en titt på Iterator-metodene som er oppført ovenfor.
Iteratormetoder
Iterator-grensesnittet støtter følgende metoder:
# 1) Neste ()
Prototype: E neste ()
Parametere: ingen parametere
Returtype: E -> element
Beskrivelse: Returnerer neste element i samlingen.
Hvis iterasjonen (samlingen) ikke har flere elementer, kaster den det NoSuchElementException .
# 2) hasNext ()
Prototype: boolsk hasNext ()
Parametere: NIL
Returtype: sant => det er elementer i samlingen.
Falske => ikke flere elementer
Beskrivelse: Funksjonen hasNext () sjekker om det er flere elementer i samlingen som nås ved hjelp av en iterator. Hvis det ikke er flere elementer, så kaller du ikke neste () -metoden. Med andre ord kan denne funksjonen brukes til å bestemme om neste () metode skal kalles.
# 3) fjern ()
Prototype: ugyldig fjerne ()
Parametere: NIL
Returtype: NIL
Beskrivelse: Fjerner det siste elementet som returneres av iteratoren som itererer over den underliggende samlingen. Fjern () -metoden kan bare ringes en gang per neste () samtale.
Hvis iteratoren ikke støtter fjerning, kaster den det UnSupportedOperationException . Det kaster IllegalStateException hvis neste metode ennå ikke er kalt.
# 4) forEachRemaining ()
Prototype: ugyldig forEachRemaining (forbruker super ER > handling)
Parametere: handling => handling som skal utføres
Returtype: tomrom
Beskrivelse: Utfører den spesifiserte handlingen på hvert av de gjenværende elementene i samlingen til alle elementene er oppbrukt eller handlingen gir et unntak. Unntak kastet fra handling overføres til den som ringer.
Hvis handlingen er null, så reiser den seg nullPointerException . Denne funksjonen er et nytt tillegg til Iterator-grensesnittet i Java 8.
Java Iterator Eksempel
La oss implementere et Java-program for å demonstrere bruken av Iterator-grensesnittet. Følgende program oppretter en matrikeliste med blomster. Deretter får den en iterator ved hjelp av iterator () -metoden i ArrayList. Etter det krysses listen for å vise hvert 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() + ' '); } } }
Produksjon:
Begrensninger for Iterator-grensesnitt
- Operasjonen for å erstatte et element eller legge til et nytt element kan ikke utføres med denne Iteratoren.
- Iterasjonen fortsetter bare i en retning, dvs. fremoverretningen.
- Støtter bare sekvensiell iterasjon.
- Når store datamengder skal gjentas, påvirkes ytelsen til Iterator.
Iterator VsIterabel
Selv om grensesnittene Iterable og Iterator høres ut som de er, er de helt forskjellige. En klasse som implementerer Iterable-grensesnittet tilegner seg muligheten til å itere over klasseobjektene som bruker iteratorgrensesnittet.
Nedenfor er noen av de viktigste forskjellene mellom disse to grensesnittene som du må være oppmerksom på:
Iterabelt grensesnitt | Iterator-grensesnitt |
---|---|
Representerer en samling som kan krysses ved hjelp av foreach loop. | Tillater å gjentas over en annen samling. |
Klassen som implementerer det iterable grensesnittet, må overstyre iterator () -metoden. | hasNext () og neste () metoder for Iterator-grensesnitt skal overstyres av klasse som implementerer det. |
Lagrer ikke nåværende tilstand. | Lagrer gjeldende status for iterasjon. |
En forekomst av iteratorgrensesnittet bør produseres hver gang iterator () -metoden kalles. | Ingen slik kontrakt for iteratorgrensesnitt. |
Flytter seg bare fremover. | Flytter fremover og undergrensesnitt som listIterator støtter toveiskjøring. |
Gir ingen metode for å endre elementene under iterasjonen. | Tilbyr fjerningsmetoden som kan fjerne element når iterasjon pågår. |
ListIterator-grensesnitt i Java
Grensesnittet ListIterator er en undergrensesnitt av iteratorgrensesnittet. Det fungerer på listetypesamlinger som Linkedlists, array lists osv. Dermed overvinner dette grensesnittet manglene i Iterator-grensesnittet.
De viktigste egenskapene til ListIterator-grensesnittet inkluderer:
- ListIterator-grensesnitt utvider Iterator-grensesnittet.
- ListIterator-grensesnittet støtter CRUD-operasjoner, dvs. opprett, les, oppdater og slett.
- Støtter iterasjon både fremover og bakover.
- Siden dette grensesnittet er toveis, er markøren alltid plassert mellom forrige og neste element.
- Dette grensesnittet fungerer hovedsakelig for listeimplementeringer som ArrayList, LinkedList, etc.
- Tilgjengelig siden Java 1.2
Grensesnittet ListIterator er representert som vist nedenfor:
Som allerede nevnt utvider ListIterator-grensesnittet Iterator-grensesnittet. Bortsett fra å støtte alle metodene for iteratorgrensesnittet, som vist ovenfor, har ListIterator-grensesnittet også egne metoder som hjelper det å utføre CRUD-operasjoner samt toveis iterasjon.
La oss diskutere ListIterator-metodene i detalj.
ListIterator Methods
Merk at Iterator-grensesnittmetodene, neste (), hasNext () og remove () fungerer nøyaktig, på samme måte som ListIterator-grensesnittet. Derfor vil vi hoppe over disse metodene i denne delen. I tillegg til de ovennevnte metodene har ListIterator følgende metoder -
Tidligere()
Prototype: E forrige ()
Parametere: NIL
Returtype:
E- forrige element i listen.
- 1 - hvis iteratoren er i begynnelsen av listen.
Beskrivelse: Denne funksjonen returnerer det forrige elementet i listen. Når det forrige elementet er returnert, flyttes markøren bakover til neste element.
hasPrevious ()
Prototype: boolsk hasPrevious ()
Parametere: NIL
Returtype: true => iterator har flere elementer når listen krysses bakover.
Beskrivelse: Denne funksjonen sjekker om ListIterator har flere elementer i bakoverretningen.
previousIndex
Prototype: int previousIndex ()
Parametere: NIL
Returtype:
int - indeks for forrige element
- 1 - hvis pekeren er i begynnelsen av listen.
Beskrivelse: Returnerer indeksen til det forrige elementet som returneres av forrige () samtale.
nextIndex
Prototype: int nextIndex ()
Parametere: NIL
Returtype:
int - neste indeks
- 1 - hvis iteratoren er på slutten av listen.
Beskrivelse: Returnerer neste indeks av elementet i listen. Dette elementet returneres ved å ringe til neste () metode.
sett()
Prototype: ugyldig sett (E og)
Parametere: e - element som skal byttes ut
Returtype: NIL
Beskrivelse: Brukes til å erstatte det siste elementet med det gitte elementet e.
Legg til()
Prototype: void add (E e)
Parametere: e - element som skal legges til
Returtype: NIL
Beskrivelse: Legger til nye elementer i listen på en plassering før den til neste () element.
Listeeksteratoreksempel
Nå vet vi hva en ListIterator er, og hva er de forskjellige metodene som støttes av den. La oss gå videre og implementere et Java-program for å demonstrere ListIterator.
I dette programmet har vi brukt ArrayList. Deretter bruker vi ListIterator-metodene til å krysse listen både i fremover og bakover og viser utdataene.
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()+' '); } }
Produksjon:
Så langt har vi diskutert grensesnittene, iterator og Listiterator. Neste vil vi se de forskjellige eksemplene på å bruke disse grensesnittene til å krysse forskjellige samlinger. Men først, la oss se på kryssing av enkle matriser og deretter gå videre til andre samlinger.
Array Iterator
I Java er det to måter å itere over matriseelementer. La oss beskrive måtene ved hjelp av kodeeksempler.
# 1) for løkke
Dette er den enkleste måten å itere over en matrise. Vi bruker en enkel for loop som øker indeksen med hver iterasjon og viser innholdet.
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 Produksjon:
Ovennevnte program viser innholdet i matrisen ved hjelp av for loop.
# 2) for Hver løkke
Dette er den andre måten å gjenta over matriser. Her bruker vi en spesialisert for loop eller ‘forEach’ loop. Her går vi gjennom matrisen for hvert element og viser deretter innholdet.
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 + ' '); } } }
Produksjon:
ForEach er mer optimalisert sammenlignet med for loop. Det er kortere å skrive og er raskere også.
ArrayList Iterator
I tilfelle du vil krysse gjennom en ArrayList-samling, kan du gjøre det ved å bruke Iterator-grensesnittet. Ettersom iterator er et grensesnitt, kan du ikke instantiere det direkte. I stedet kan du bruke ArrayList-samlingens iterator () -metoden for å få iteratoren og deretter krysse listen.
Iterator iterator ();
Eksempel for å demonstrere 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() + ' '); } }
Produksjon:
LinkedList Iterator
La oss nå se funksjonaliteten til en iterator i tilfelle LinkedList-samlingen.
LinkedList-samlingen støtter listIterator () -metoden som returnerer listIteratoren til å krysse gjennom den koblede listen.
Det generelle formatet for denne funksjonen er
ListIterator list_iter = LinkedList.listIterator (int-indeks);
Her er indeksen en heltallverdi som spesifiserer posisjonen i koblingslistesamlingen der traverseringen skal starte.
La oss forstå listen iterator i den koblede listen med et eksempelprogram. Vi har endret det samme array-iteratorprogrammet og endret det slik at det inneholder en listiterator med 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() + ' '); } }
Produksjon:
hva er uat i programvaretesting
Java Map / Hashmap Iterator
Kart eller dets variasjoner som hashmap, treemap osv. Er ikke samlinger. Derfor kan du ikke bruke iterator-metoden direkte på den. I stedet bør du gjenta over nøkkeloppføringsverdiene for å lese nøkkel / verdiparene.
Selv om du kan bruke forskjellige metoder som forEach, for loop, etc. for å iterere over kartverdier, er det den beste og effektive metoden å bruke en iterator til å iterere gjennom nøkkelverdiene. I tillegg kan du også fjerne oppføringer fra kartet under iterasjon ved hjelp av fjerningsmetoden.
Eksempel på bruk av Iterator med HashMap.
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()); } } }
Produksjon:
I det ovennevnte programmet har vi definert et kart med heltallnøkler og strengverdier. Deretter definerer vi en iterator over kartet. Skriv inn og vis nøkkel- / verdiparene.
Java Set Iterator
Iterator () -metoden til Java.util.set brukes til å få iteratoren som returnerer elementene i settet i tilfeldig rekkefølge.
Iterator set_iterator = Set.iterator();
'Set_iterator' gjentas over de forskjellige elementene i settet og returnerer verdiene.
På lignende måte inneholder hasksettet også en iteratorfunksjon som returnerer en iterator som en set iterator.
Iterator hashset_iterator = Hash_Set.iterator();
Nedenfor er programmeringseksemplet for å demonstrere set iteratoren.
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()); } } }
Produksjon:
Denne implementeringen bruker HashSet iterator og viser individuelle verdier ved å itere over HashSet-elementene.
Iterator vs ListIterator
La oss tabellisere hovedforskjellene mellom grensesnittene Iterator og ListIterator.
Iterator ListIterator Kan krysse alle samlingene inkludert sett, kart osv. Den kan brukes til å krysse bare samling av listetyper som ArrayList, LinkedList. Itererer samlingen bare fremover. Kan gjentas over samlingen både fremover og bakover. Kan ikke få indekser. Kan få indekser. Ingen måte å legge til nye elementer i samlingen. Du kan legge til nye elementer i samlingen. Iterator kan ikke endre elementene under iterasjonen. ListIterator kan endre elementene i samlingen ved å bruke metoden set ().
ofte stilte spørsmål
Q # 1) Hva er Iterasjonen i Java?
Svar: En iterasjon er en prosess der en kodeblokk utføres gjentatte ganger til en gitt tilstand holder eller ikke eksisterer. Ved hjelp av iterasjon kan du krysse gjennom en sekvens av elementer eller behandle dataene.
Q # 2) Hvor mange typer Iteratorer er det i Java?
Svar: Iteratorer brukes til å krysse gjennom samlingene i Java.
Det er tre typer iteratorer i Java:
- Opptellere
- Iteratorer
- ListIterators
Sp # 3) Hvordan bruker jeg en Iterator i Java?
Svar: For å bruke iteratoren til å krysse gjennom samlingen, må du først hente iteratoren ved hjelp av iterator () -metoden til den angitte samlingen.
Deretter kan du bruke hasNext () og neste () metodene til iteratoren for å få elementet.
Q # 4) Hvorfor brukes Iterator i stedet for for loop?
Svar: Både iteratoren så vel som for loop brukes til gjentatte ganger å utføre en spesifikk kodeblokk. Men hovedforskjellen er at i loop kan du ikke endre eller endre innholdet i samlingen. Selv om du prøver å endre den, vil den kaste concurrentModificationException. Ved hjelp av iterator kan du fjerne et element fra samlingen.
Spørsmål nr. 5) Hvorfor trenger vi Iterator i Java?
Svar: Iterator hjelper deg med å hente elementene i samlingen eller en container uten at programmereren trenger å kjenne den interne strukturen eller arbeidet i samlingen. De er mer elegante, bruker mindre minne, og programmereren er også spart for å skrive lang kode.
For det andre kan elementene lagres i samlingen på en hvilken som helst måte, men ved hjelp av en iterator kan programmereren hente dem akkurat som en liste eller en hvilken som helst annen sekvens.
Konklusjon
Vi har diskutert iteratorene i Java som brukes med samlinger i denne opplæringen. Denne kunnskapen om iteratorer hjelper leserne til å forstå samlingene vi skal lære i de påfølgende opplæringene.
Anbefalt lesing
- Java-grensesnitt og abstrakt klasseopplæring med eksempler
- JAVA-opplæring for nybegynnere: 100+ praktiske Java-videoveiledninger
- Java-distribusjon: Opprettelse og utføring av Java JAR-fil
- Java 'dette' nøkkelord: Opplæring med kodeeksempler
- Java Virtual Machine: Hvordan JVM hjelper med å kjøre Java-applikasjoner
- Få tilgang til modifikatorer i Java - opplæring med eksempler
- Java Reflection Tutorial med eksempler
- C ++ Vs Java: Topp 30 forskjeller mellom C ++ og Java med eksempler