Måter å skifte over en liste i Java

1. Introduksjon

Iterering over elementene i en liste er en av de vanligste oppgavene i et program.

I denne opplæringen skal vi se på forskjellige måter å gjøre dette på Java. Vi vil fokusere på å gå gjennom listen i rekkefølge, men det er også enkelt å gå i omvendt retning.

2. til Løkke

For det første, la oss se gjennom noen til loop alternativer.

La oss begynne med å definere en liste over land for eksemplene våre:

Liste land = Arrays.asList ("Tyskland", "Panama", "Australia");

2.1. Grunnleggende til Løkke

Den vanligste flytkontrolluttalelsen for iterasjon er den grunnleggende til Løkke.

De til loop definerer tre typer setninger atskilt med semikolon. Den første uttalelsen er initialiseringserklæringen. Den andre definerer oppsigelsestilstanden. Den siste uttalelsen er oppdateringsklausulen.

Her bruker vi ganske enkelt en heltallvariabel som en indeks:

for (int i = 0; i <lands.størrelse (); i ++) {System.out.println (lands.get (i)); }

I initialiseringen må vi erklære en heltallvariabel for å spesifisere startpunktet. Denne variabelen fungerer vanligvis som listeindeksen.

Termineringsbetingelsen er et uttrykk som etter evaluering returnerer en boolsk, når dette uttrykket vurderes til falsk løkken er ferdig.

Oppdateringsklausulen brukes til å endre den nåværende tilstanden til indeksvariabelen, øke den eller redusere den til avslutningspunktet.

2.2. Forbedret til Løkke

Den forbedrede til loop er en enkel struktur som lar oss besøke hvert element i en liste. Det ligner det grunnleggende for loop, men mer lesbart og kompakt. Følgelig er en av de mest brukte skjemaene for å krysse en liste.

Legg merke til at den forbedrede til loop er enklere enn det grunnleggende til Løkke:

for (Stringland: land) {System.out.println (land); }

3. Iteratorer

An Iterator er et designmønster som gir oss et standardgrensesnitt for å krysse en datastruktur uten å måtte bekymre oss for den interne representasjonen.

Denne måten å krysse datastrukturer gir mange fordeler, blant annet kan vi understreke at koden vår ikke er avhengig av implementeringen.

Derfor kan strukturen være et binært tre eller en dobbelt koblet liste siden Iterator trekker oss fra måten å utføre traversalen på. På denne måten kan vi enkelt erstatte datastrukturer i koden vår uten ubehagelige problemer.

3.1. Iterator

I Java er Iterator mønster gjenspeiles i java.util.Iterator klasse. Det er mye brukt i Java Samlinger. Det er to viktige metoder i en Iterator, den hasNext () og neste () metoder.

Her demonstrerer vi bruken av begge deler:

Iterator-landIterator = country.iterator (); mens (countryIterator.hasNext ()) {System.out.println (landsIterator.next ()); }

De hasNext () metode sjekker om det er noen elementer igjen i listen.

De neste () metode returnerer neste element i iterasjonen.

3.2. ListIterator

EN ListIterator tillater oss å krysse en liste over elementer i enten fremover eller bakover.

Ruller en liste med ListIterator fremover følger en mekanisme som den som brukes av Iterator. På denne måten kan vi flytte iteratoren videre med neste () metode, og vi kan finne slutten av listen ved hjelp av hasNext () metode.

Som vi kan se, er ListIterator ser veldig ut som Iterator som vi brukte tidligere:

ListIterator listIterator = country.listIterator (); mens (listIterator.hasNext ()) {System.out.println (listIterator.next ()); }

4. for hver()

4.1. Iterable.forEach ()

Siden Java 8 kan vi bruke for hver() metode for å gjenta elementene i en liste. Denne metoden er definert i Iterabel grensesnitt og kan godta Lambda-uttrykk som parameter.

Syntaksen er ganske enkel:

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

Før for hver funksjon, var alle iteratorer i Java aktive, det vil si at de involverte en eller en stund sløyfe som krysset datainnsamlingen til en viss tilstand var oppfylt.

Med introduksjonen av for hver som en funksjon i Iterabel grensesnitt, alle klasser som implementeres Iterabel har for hver funksjon lagt til.

4.2. Stream.forEach ()

Vi kan også konvertere en samling verdier til en Stream, og vi kan ha tilgang til operasjoner som for hver(), kart(), eller filter().

Her viser vi en typisk bruk for strømmer:

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

5. Konklusjon

I denne artikkelen viste vi de forskjellige måtene å iterere over elementene i en liste ved hjelp av Java API. Blant disse nevnte vi til løkke, den forbedrede til løkke, den Iterator, den ListIterator og for hver() metode (inkludert i Java 8).

I tillegg viste vi også hvordan du bruker for hver() metode med Strømmer.

Til slutt er all koden som brukes i denne artikkelen tilgjengelig i Github-repoen.


$config[zx-auto] not found$config[zx-overlay] not found