Manieren om een ​​lijst in Java te herhalen

1. Inleiding

Het herhalen van de elementen van een lijst is een van de meest voorkomende taken in een programma.

In deze zelfstudie gaan we verschillende manieren bekijken om dit in Java te doen. We zullen ons concentreren op het op volgorde doorlopen van de lijst, hoewel omgekeerd ook eenvoudig is.

2. voor Lus

Laten we eerst wat bekijken voor loop opties.

Laten we beginnen met het definiëren van een lijst met landen voor onze voorbeelden:

Lijst met landen = Arrays.asList ("Duitsland", "Panama", "Australië");

2.1. Basic voor Lus

De meest gebruikelijke flow control-instructie voor iteratie is de basic voor lus.

De voor lus definieert drie soorten instructies gescheiden door puntkomma's. De eerste instructie is de initialisatie-instructie. De tweede definieert de beëindigingsvoorwaarde. De laatste verklaring is de update-clausule.

Hier gebruiken we gewoon een integer-variabele als index:

voor (int i = 0; i <landen.size (); i ++) {System.out.println (landen.get (i)); }

Bij de initialisatie moeten we een integer-variabele declareren om het startpunt te specificeren. Deze variabele fungeert doorgaans als de lijstindex.

De beëindigingsvoorwaarde is een uitdrukking die na evaluatie een booleaanse waarde retourneert, zodra deze uitdrukking resulteert in false de lus eindigt.

De update-clausule wordt gebruikt om de huidige status van de indexvariabele te wijzigen, deze te vergroten of te verkleinen tot het punt van beëindiging.

2.2. Verbeterd voor Lus

De verbeterde voor loop is een eenvoudige structuur waarmee we elk element van een lijst kunnen bezoeken. Het is vergelijkbaar met de standaard for-lus, maar is beter leesbaar en compacter. Daarom is dit een van de meest gebruikte formulieren om een ​​lijst te doorlopen.

Merk op dat het verbeterde voor loop is eenvoudiger dan de basis voor lus:

voor (String land: landen) {System.out.println (land); }

3. Iteratoren

Een Iterator is een ontwerppatroon dat ons een standaardinterface biedt om een ​​datastructuur te doorlopen zonder ons zorgen te hoeven maken over de interne weergave.

Deze manier van doorlopen van datastructuren biedt veel voordelen, waarvan we kunnen benadrukken dat onze code niet afhankelijk is van de implementatie.

Daarom kan de structuur een binaire boom of een dubbel gekoppelde lijst zijn, aangezien de Iterator abstraheert ons van de manier waarop de traversal wordt uitgevoerd. Op deze manier kunnen we eenvoudig datastructuren in onze code vervangen zonder vervelende problemen.

3.1. Iterator

In Java is het Iterator patroon wordt weerspiegeld in de java.util.Iterator klasse. Het wordt veel gebruikt in Java Collecties. Er zijn twee belangrijke methoden in een Iterator, de hasNext () en De volgende() methoden.

Hier demonstreren we het gebruik van beide:

Iterator landenIterator = landen.iterator (); while (landenIterator.hasNext ()) {System.out.println (landenIterator.next ()); }

De hasNext () methode controleert of er nog elementen in de lijst staan.

De De volgende() methode geeft het volgende element in de iteratie terug.

3.2. ListIterator

EEN ListIterator stelt ons in staat om een ​​lijst met elementen vooruit of achteruit te doorlopen.

Met door een lijst scrollen ListIterator forward volgt een mechanisme dat vergelijkbaar is met dat van de Iterator. Op deze manier kunnen we de iterator naar voren verplaatsen met de De volgende() methode, en we kunnen het einde van de lijst vinden met behulp van de hasNext () methode.

Zoals we kunnen zien, is de ListIterator lijkt erg op de Iterator die we eerder gebruikten:

ListIterator listIterator = landen.listIterator (); while (listIterator.hasNext ()) {System.out.println (listIterator.next ()); }

4. voor elke ()

4.1. Iterable.forEach ()

Sinds Java 8 kunnen we de voor elke () methode om de elementen van een lijst te herhalen. Deze methode is gedefinieerd in het Herhaalbaar interface en kan Lambda-expressies als parameter accepteren.

De syntaxis is vrij eenvoudig:

landen.forEach (System.out :: println);

Voordat de voor elk functie waren alle iterators in Java actief, dat wil zeggen dat ze een for- of een while-lus hadden die de gegevensverzameling doorkruiste totdat aan een bepaalde voorwaarde was voldaan.

Met de introductie van voor elk als functie in het Herhaalbaar interface, alle klassen die Herhaalbaar hebben de voor elk functie toegevoegd.

4.2. Stream.forEach ()

We kunnen ook een verzameling waarden naar een stream converteren en we hebben toegang tot bewerkingen zoals voor elke (), kaart(), of filter().

Hier demonstreren we een typisch gebruik voor streams:

landen.stream (). forEach ((c) -> System.out.println (c));

5. Conclusie

In dit artikel hebben we de verschillende manieren laten zien om de elementen van een lijst te herhalen met behulp van de Java API. Onder deze noemden we de voor loop, de verbeterde voor loop, de Iterator, de ListIterator en de voor elke () methode (inbegrepen in Java 8).

Daarnaast hebben we ook laten zien hoe u de voor elke () methode met Streams.

Ten slotte is alle code die in dit artikel wordt gebruikt, beschikbaar in onze Github-opslagplaats.