java iterator learn use iterators java with examples
In deze zelfstudie leren we over iterators in Java. We zullen een gedetailleerde discussie hebben over de Iterator- en ListIterator-interfaces in Java:
We hebben alles over het Java Collection Framework en de verschillende ondersteunende interfaces en klassen onderzocht in een van onze vorige tutorials.
Als u een collectie heeft, wilt u toegang krijgen tot de elementen ervan, de elementen toevoegen / verwijderen of verwerken. Om al deze bewerkingen via een Java-programma uit te voeren, moet u door de verzameling die u gebruikt, kunnen doorlopen. Dit is waar de iterator in beeld komt.
Wat je leert:
- Wat is een Java-iterator?
- Gevolgtrekking
Wat is een Java-iterator?
In Java is een Iterator een constructie die wordt gebruikt om door de verzameling te lopen of er doorheen te stappen.
Om een Iterator te gebruiken, moet u het iterator-object ophalen met de ' iterator () ' methode van de collectie-interface. Java Iterator is een framework-interface voor verzamelingen en maakt deel uit van het pakket 'java.util'. Met Java Iterator kunt u door de verzameling objecten heen lopen.
De Java Iterator-interface vervangt de enumerator die eerder werd gebruikt om enkele eenvoudige verzamelingen zoals vectoren te doorlopen.
De belangrijkste verschillen tussen Java Iterator en Enumerator zijn:
- Aanzienlijke verbetering in de namen van methoden.
- U kunt methode-elementen verwijderen uit de verzameling die wordt doorlopen met behulp van een iterator.
In deze tutorial bespreken we de details van de Iterator-interface en ListIterator-interface die een bidirectionele interface is.
Iterator-typen
- Enumerator
- Iterator
- ListIterator
Een Enumerator wordt nu zelden gebruikt. Daarom zullen we ons in onze tutorialserie concentreren op Iterator- en ListIterator-interfaces.
Iterator-interface in Java
De Iterator-interface in Java maakt deel uit van het Collections-framework in het ‘java.util’ -pakket en is een cursor die kan worden gebruikt om door de verzameling objecten te lopen.
De Iterator-interface heeft de volgende hoofdkenmerken:
- De Iterator-interface is beschikbaar vanaf het Java 1.2-verzamelframework.
- Het doorloopt de verzameling objecten een voor een.
- In de volksmond bekend als 'Universal Java Cursor' omdat het werkt met alle verzamelingen.
- Deze interface ondersteunt ‘lezen’ en ‘verwijderen’ bewerkingen, d.w.z. je kunt een element verwijderen tijdens een iteratie met behulp van de iterator.
Algemene vertegenwoordiging van de Iterator-interface wordt hieronder gegeven:
Laten we vervolgens eens kijken naar de hierboven genoemde Iterator-methoden.
Iterator-methoden
De Iterator-interface ondersteunt de volgende methoden:
# 1) Volgende ()
Voorlopig ontwerp: E volgende ()
Parameters: geen parameters
Retourtype: E -> element
Omschrijving: Retourneert het volgende element in de verzameling.
Als de iteratie (verzameling) geen elementen meer heeft, gooit het NoSuchElementException
# 2) hasNext ()
Voorlopig ontwerp: boolean hasNext ()
Parameters: NIL
Retourtype: true => er zijn elementen in de collectie.
False => geen elementen meer
Omschrijving: De functie hasNext () controleert of er meer elementen in de verzameling zijn waartoe toegang wordt verkregen met behulp van een iterator. Als er geen elementen meer zijn, roep je de methode next () niet aan. Met andere woorden, deze functie kan worden gebruikt om te beslissen of de methode next () moet worden aangeroepen.
# 3) verwijderen ()
Voorlopig ontwerp: leegte verwijderen ()
Parameters: NIL
Retourtype: NIL
Omschrijving: Verwijdert het laatste element dat wordt geretourneerd door de iterator die herhaalt over de onderliggende verzameling. De methode remove () kan slechts één keer per aanroep van volgende () worden aangeroepen.
Als de iterator de verwijderbewerking niet ondersteunt, gooit het UnSupportedOperationException Het gooit IllegalStateException als de volgende methode nog niet wordt aangeroepen.
# 4) forEachRemaining ()
Voorlopig ontwerp: void forEachRemaining (consumer super IS > actie)
Parameters: action => uit te voeren actie
Retourtype: leegte
Omschrijving: Voert de gespecificeerde actie uit op elk van de resterende elementen van de verzameling totdat alle elementen zijn uitgeput of de actie een uitzondering genereert. Uitzonderingen die door actie worden gegenereerd, worden doorgegeven aan de beller.
Als de actie nul is, wordt deze verhoogd nullPointerException Deze functie is een nieuwe toevoeging aan de Iterator-interface in Java 8.
Java Iterator-voorbeeld
Laten we een Java-programma implementeren om het gebruik van de Iterator-interface te demonstreren. Het volgende programma maakt een ArrayList met bloemen. Vervolgens krijgt het een iterator met behulp van de iterator () - methode van de ArrayList. Daarna wordt de lijst doorlopen om elk element weer te geven.
Uitgang:
Beperkingen van de Iterator-interface
- De bewerking om een element te vervangen of een nieuw element toe te voegen, kan niet worden uitgevoerd met deze Iterator.
- De iteratie verloopt slechts in één richting, d.w.z. de voorwaartse richting.
- Ondersteunt alleen opeenvolgende iteratie.
- Wanneer grote hoeveelheden gegevens moeten worden herhaald, wordt de prestatie van de Iterator beïnvloed.
Iterator VsHerhaalbaar
Hoewel de interfaces Iterable en Iterator vergelijkbaar klinken, zijn ze totaal verschillend. Een klasse die de itereerbare interface implementeert, krijgt de mogelijkheid om de klasseobjecten die de iteratorinterface gebruiken, te herhalen.
Hieronder staan enkele van de belangrijkste verschillen tussen deze twee interfaces waarvan u op de hoogte moet zijn:
Herhaalbare interface | Iterator-interface |
---|---|
Vertegenwoordigt een verzameling die kan worden doorlopen met een foreach-lus. | Hiermee kan een andere verzameling worden herhaald. |
De klasse die de iterabele interface implementeert, moet de methode iterator () overschrijven. | hasNext () en next () methoden van de Iterator-interface moeten worden overschreven door de klasse die het implementeert. |
Slaat de huidige status niet op. | Slaat de huidige iteratiestatus op. |
Elke keer dat de iterator () - methode wordt aangeroepen, moet een instantie van de iterator-interface worden geproduceerd. | Geen contract voor iterator-interface. |
Beweegt alleen in voorwaartse richting. | Bewegingen in de voorwaartse richting en subinterfaces zoals listIterator ondersteunen bidirectionele verplaatsing. |
Biedt geen methode om de elementen tijdens iteratie te wijzigen. | Biedt de verwijderingsmethode die elementen kan verwijderen wanneer iteratie wordt uitgevoerd. |
ListIterator-interface in Java
De interface ListIterator is een subinterface van de iteratorinterface. Het werkt op verzamelingen van het lijsttype, zoals Linkedlists, array-lijsten, enz. Zo overwint deze interface de tekortkomingen van de Iterator-interface.
De belangrijkste kenmerken van de ListIterator-interface zijn:
- ListIterator-interface breidt de Iterator-interface uit.
- ListIterator-interface ondersteunt CRUD-bewerkingen, d.w.z. maken, lezen, bijwerken en verwijderen.
- Ondersteunt iteratie in zowel voorwaartse als achterwaartse richting.
- Omdat deze interface bidirectioneel is, staat de cursor altijd tussen de vorige en volgende elementen.
- Deze interface werkt voornamelijk voor lijstimplementaties zoals ArrayList, LinkedList, etc.
- Beschikbaar sinds Java 1.2
De interface ListIterator wordt weergegeven zoals hieronder weergegeven:
Zoals eerder vermeld, breidt de ListIterator-interface de Iterator-interface uit. Dus afgezien van het ondersteunen van alle methoden van de iterator-interface, zoals hierboven weergegeven, heeft de ListIterator-interface ook eigen methoden die het helpen CRUD-bewerkingen uit te voeren, evenals bidirectionele iteratie.
Laten we de ListIterator-methoden in detail bespreken.
ListIterator-methoden
Merk op dat de Iterator-interfacemethoden, next (), hasNext () en remove () precies en op dezelfde manier werken als de ListIterator-interface. Daarom zullen we deze methoden in deze sectie overslaan. Naast de bovengenoemde methoden heeft ListIterator de volgende methoden:
Vorige ()
Voorlopig ontwerp: E vorige ()
Parameters: NIL
Retourtype:
E- vorig element in de lijst.
1 - als de iterator aan het begin van de lijst staat.
Omschrijving: Deze functie retourneert het vorige element in de lijst. Zodra het vorige element is geretourneerd, wordt de cursor achterwaarts verplaatst naar het volgende element.
hasPrevious ()
Voorlopig ontwerp: boolean hasPrevious ()
Parameters: NIL
Retourtype: true => iterator heeft meer elementen wanneer de lijst achteruit wordt doorlopen.
Omschrijving: Deze functie controleert of de ListIterator meer elementen in achterwaartse richting heeft.
vorigeIndex
Voorlopig ontwerp: int previousIndex ()
Parameters: NIL
Retourtype:
int - index van het vorige element
1 - als de aanwijzer aan het begin van de lijst staat.
Omschrijving: Retourneert de index van het vorige element dat wordt geretourneerd door de aanroep vorige ().
volgendeIndex
Voorlopig ontwerp: int nextIndex ()
Parameters: NIL
Retourtype:
int - volgende index
1 - als de iterator aan het einde van de lijst staat.
Omschrijving: Retourneert de volgende index van het element in de lijst. Dit element wordt geretourneerd door een aanroep naar de methode next ().
set ()
Voorlopig ontwerp: leegte set (E en)
Parameters: e - element dat moet worden vervangen
Retourtype: NIL
Omschrijving: Wordt gebruikt om het laatste element te vervangen door het gegeven element e.
toevoegen()
Voorlopig ontwerp: ongeldig toevoegen (E e)
Parameters: e - element dat moet worden toegevoegd
Retourtype: NIL
Omschrijving: Voegt nieuwe elementen toe aan de lijst op een positie vóór die van het next () element.
List Iterator Voorbeeld
Nu weten we wat een ListIterator is en wat de verschillende methoden zijn die erdoor worden ondersteund. Laten we doorgaan en een Java-programma implementeren om de ListIterator te demonstreren.
In dit programma hebben we ArrayList gebruikt. Vervolgens gebruiken we de ListIterator-methoden om de lijst zowel in voorwaartse als achterwaartse richting te doorlopen en de uitvoer weer te geven.
Uitgang:
Tot dusver hebben we de interfaces, iterator en Listiterator besproken, daarna zullen we de verschillende voorbeelden zien van het gebruik van deze interfaces om door verschillende collecties te lopen. Maar laten we eerst eens kijken naar het doorlopen van eenvoudige arrays en vervolgens naar andere verzamelingen.
Array Iterator
In Java zijn er twee manieren om arrayelementen te herhalen. Laten we de manieren beschrijven met behulp van codevoorbeelden.
# 1) voor lus
Dit is de eenvoudigste manier om een array te herhalen. We gebruiken een eenvoudige for-lus die de index bij elke iteratie verhoogt en de inhoud ervan weergeeft.
Uitgang:
Het bovenstaande programma geeft de inhoud van de array weer met for loop.
# 2) voor elke lus
Dit is de tweede manier om arrays te herhalen. Hier gebruiken we een gespecialiseerde for loop of ‘forEach’ loop. Hier doorlopen we de array voor elk element en geven vervolgens de inhoud weer.
Uitgang:
De forEach is meer geoptimaliseerd in vergelijking met for-loop. Het is korter om te typen en is ook sneller.
ArrayList Iterator
Als u door een ArrayList-verzameling wilt bladeren, kunt u dit doen met behulp van de Iterator-interface. Aangezien iterator een interface is, kunt u deze niet rechtstreeks instantiëren. In plaats daarvan kunt u de iterator () -methode van de ArrayList-verzameling gebruiken om de iterator op te halen en vervolgens door de lijst te bladeren.
Iterator-iterator ();
Voorbeeld om de ArrayList Iterator te demonstreren.
Uitgang:
LinkedList Iterator
Laten we nu eens kijken naar de functionaliteit van een iterator in het geval van LinkedList-verzameling.
De LinkedList-collectie ondersteunt de methode listIterator () die de listIterator retourneert om door de gekoppelde lijst te bladeren.
Het algemene formaat voor deze functie is
ListIterator list_iter = LinkedList.listIterator (int index);
Hier is de index een geheel getal dat de positie in de linkedlist-verzameling aangeeft waar het doorlopen moet beginnen.
Laten we de lijst-iterator in de gekoppelde lijst begrijpen met een voorbeeldprogramma. We hebben hetzelfde array-iteratorprogramma gewijzigd en het gewijzigd om een listiterator met LinkedList te bevatten.
Uitgang:
hoe u een object-array in java maakt
Java Map / Hashmap Iterator
Kaart of zijn variaties zoals hashmap, treemap, etc. zijn geen verzamelingen. Daarom kunt u de iteratormethode er niet rechtstreeks op gebruiken. In plaats daarvan moet u de sleutelinvoerwaarden herhalen om de sleutel / waarde-paren te lezen.
Hoewel u verschillende methoden zoals forEach, for loop, etc. kunt gebruiken om kaartwaarden te herhalen, is het gebruik van een iterator om de sleutelwaarden te herhalen de beste en efficiënte methode. Bovendien kunt u tijdens iteratie ook items van de kaart verwijderen met behulp van de verwijdermethode.
Voorbeeld van het gebruik van de Iterator met HashMap.
Uitgang:
In het bovenstaande programma hebben we een kaart gedefinieerd met integer-sleutels en stringtypewaarden. Vervolgens definiëren we een iterator over de kaart. Voer de sleutel / waarde-paren in en geef ze weer.
Java Set Iterator
De iterator () methode van Java.util.set wordt gebruikt om de iterator op te halen die de elementen in de set in willekeurige volgorde retourneert.
De 'set_iterator' itereert over de verschillende elementen van de set en retourneert hun waarden.
Op een vergelijkbare manier bevat de hash-set ook een iteratorfunctie die een iterator retourneert zoals een set-iterator.
Hieronder is het programmeervoorbeeld gegeven om de set iterator te demonstreren.
Uitgang:
Deze implementatie maakt gebruik van de HashSet-iterator en geeft individuele waarden weer door te itereren over de HashSet-elementen.
Iterator versus ListIterator
Laten we de belangrijkste verschillen tussen de Iterator- en ListIterator-interfaces in tabelvorm weergeven.
Iterator | ListIterator |
---|---|
Kan alle collecties doorkruisen, inclusief set, kaart, etc. | Het kan worden gebruikt om alleen verzameling van lijsttypen zoals ArrayList, LinkedList te doorlopen. |
Herhaalt de verzameling alleen in voorwaartse richting. | Kan de verzameling zowel in voorwaartse als achterwaartse richting herhalen. |
Kan geen indexen verkrijgen. | Kan indexen verkrijgen. |
Geen manier om nieuwe elementen aan de collectie toe te voegen. | U kunt nieuwe elementen aan de collectie toevoegen. |
Iterator kan de elementen tijdens iteratie niet wijzigen. | ListIterator kan de elementen in de collectie wijzigen met de methode set (). |
Veel Gestelde Vragen
V # 1) Wat is de herhaling in Java?
Antwoord: Een iteratie is een proces waarbij een codeblok herhaaldelijk wordt uitgevoerd totdat een bepaalde voorwaarde wel of niet bestaat. Met behulp van iteratie kunt u door een reeks elementen bladeren of de gegevens verwerken.
Vraag 2) Hoeveel soorten iteratoren zijn er in Java?
Antwoord: Iteratoren worden gebruikt om door de collecties op Java te lopen.
Er zijn drie soorten iterators in Java:
- Tellers
- Iteratoren
- ListIterators
V # 3) Hoe gebruik ik een Iterator in Java?
Antwoord: Om de iterator te gebruiken om door de verzameling te bladeren, moet u eerst de iterator ophalen met de methode iterator () van de opgegeven verzameling.
Vervolgens kunt u de hasNext () en next () methoden van de iterator gebruiken om het element op te halen.
V # 4) Waarom wordt Iterator gebruikt in plaats van for loop?
Antwoord: Zowel de iterator als de for-lus wordt gebruikt om herhaaldelijk een specifiek codeblok uit te voeren. Maar het belangrijkste verschil is dat je in for-lus de inhoud van de collectie niet kunt wijzigen of wijzigen. Zelfs als u probeert het te wijzigen, genereert het concurrentModificationException. Met iterator kun je een element uit de collectie verwijderen.
V # 5) Waarom hebben we Iterator nodig in Java?
Antwoord: Iterator helpt je om de elementen in de collectie of een container terug te vinden zonder dat de programmeur de interne structuur of werking van de collectie hoeft te kennen. Ze zijn eleganter, verbruiken minder geheugen en ook de programmeur wordt bespaard bij het schrijven van lange code.
Ten tweede kunnen de elementen op elke manier in de verzameling worden opgeslagen, maar met behulp van een iterator kan de programmeur ze net als een lijst of een andere reeks ophalen.
Gevolgtrekking
We hebben in deze tutorial de iteratoren in Java besproken die bij verzamelingen worden gebruikt. Deze kennis van iteratoren zal de lezers helpen de collecties te begrijpen die we in onze volgende tutorials zullen leren.
Aanbevolen literatuur
- Java-interface en abstracte les met voorbeelden
- JAVA-zelfstudie voor beginners: 100+ praktische Java-videotutorials
- Java-implementatie: creatie en uitvoering van Java JAR-bestand
- Java 'dit' trefwoord: zelfstudie met codevoorbeelden
- Java Virtual Machine: hoe JVM helpt bij het uitvoeren van Java-applicaties
- Toegang tot modificatoren in Java - zelfstudie met voorbeelden
- Zelfstudie over reflectie in Java met voorbeelden
- C ++ Vs Java: Top 30 verschillen tussen C ++ en Java met voorbeelden