Veiledning til Java ArrayList

1. Oversikt

I denne artikkelen skal vi ta en titt på ArrayList klasse fra Java Collections Framework. Vi vil diskutere dens egenskaper, vanlige brukssaker, samt fordeler og ulemper.

ArrayList ligger innenfor Java Core Libraries, slik at du ikke trenger noen ekstra biblioteker. For å bruke den, legg bare til følgende importuttalelse:

importere java.util.ArrayList;

Liste representerer en ordnet sekvens av verdier der noen verdi kan forekomme mer enn én gang.

ArrayList er en av de Liste implementeringer bygget på toppen av en matrise, som er i stand til å vokse og krympe dynamisk når du legger til / fjerner elementer. Elementer kan lett nås ved at indeksene starter fra null. Denne implementeringen har følgende egenskaper:

  • Tilfeldig tilgang tar O (1) tid
  • Å legge til element tar amortisert konstant tid O (1)
  • Sette inn / slette tar På) tid
  • Søking tar På) tid for usortert utvalg og O (log n) for en sortert en

2. Lag en ArrayList

ArrayList har flere konstruktører, og vi vil presentere dem alle i denne delen.

Legg merke til det først ArrayList er en generisk klasse, så du kan parametere den med hvilken som helst type du vil, og kompilatoren vil sørge for at du for eksempel ikke kan sette Heltall verdier inne i en samling av Strenger. Du trenger heller ikke å kaste elementer når du henter dem fra en samling.

For det andre er det god praksis å bruke generisk grensesnitt Liste som en variabel type, fordi den kobler den fra en bestemt implementering.

2.1. Standard No-Arg Constructor

Listeliste = ny ArrayList (); assertTrue (list.isEmpty ());

Vi lager rett og slett en tom ArrayList forekomst.

2.2. Konstruktør som godtar startkapasitet

Listeliste = ny ArrayList (20);

Her angir du startlengden til en underliggende matrise. Dette kan hjelpe deg med å unngå unødvendig endring av størrelse mens du legger til nye elementer.

2.3. Konstruktør godtar Samling

Samlingsnummer = IntStream.range (0, 10) .boxed (). Collect (toSet ()); Listeliste = ny ArrayList (tall); assertEquals (10, list.size ()); assertTrue (numbers.containsAll (liste));

Legg merke til at det elementet i Samling forekomst brukes til å fylle ut den underliggende matrisen.

3. Legg til elementer i ArrayList

Du kan sette inn et element enten på slutten eller i den spesifikke posisjonen:

Listeliste = ny ArrayList (); list.add (1L); list.add (2L); list.add (1, 3L); assertThat (Arrays.asList (1L, 3L, 2L), equalTo (liste));

Du kan også sette inn en samling eller flere elementer samtidig:

Listeliste = ny ArrayList (Arrays.asList (1L, 2L, 3L)); LongStream.range (4, 10) .boxed () .collect (collectAndThen (toCollection (ArrayList :: new), ys -> list.addAll (0, ys))); assertThat (Arrays.asList (4L, 5L, 6L, 7L, 8L, 9L, 1L, 2L, 3L), equalTo (liste));

4. Iterate Over the ArrayList

Det er to typer iteratorer tilgjengelig: Iterator og ListIterator.

Mens førstnevnte gir deg en mulighet til å krysse listen i en retning, lar sistnevnte deg krysse den i begge retninger.

Her vil vi bare vise deg ListIterator:

Liste liste = ny ArrayList (IntStream.range (0, 10) .boxed (). Samle (toCollection (ArrayList :: ny))); ListIterator it = list.listIterator (list.size ()); Listresultat = ny ArrayList (list.size ()); while (it.hasPrevious ()) {result.add (it.previous ()); } Collections.reverse (liste); assertThat (resultat, equalTo (liste));

Du kan også søke, legge til eller fjerne elementer ved hjelp av iteratorer.

5. Søk i ArrayList

Vi vil demonstrere hvordan søking fungerer ved hjelp av en samling:

Listeliste = LongStream.range (0, 16) .boxed () .map (Long :: toHexString) .collect (toCollection (ArrayList :: new)); Liste stringsToSearch = ny ArrayList (liste); stringsToSearch.addAll (liste);

5.1. Søker i en usortert liste

For å finne et element du kan bruke oversikt over() eller lastIndexOf () metoder. De godtar begge et objekt og kommer tilbake int verdi:

assertEquals (10, stringsToSearch.indexOf ("a")); assertEquals (26, stringsToSearch.lastIndexOf ("a"));

Hvis du vil finne alle elementene som tilfredsstiller et predikat, kan du filtrere samlingen ved hjelp av Java 8 Stream API (les mer om det her) ved hjelp av Predikere som dette:

Sett matchingStrings = ny HashSet (Arrays.asList ("a", "c", "9")); Listeresultat = stringsToSearch .stream () .filter (matchingStrings :: inneholder) .collect (toCollection (ArrayList :: ny)); assertEquals (6, result.size ());

Det er også mulig å bruke en til loop eller en iterator:

Iterator it = stringsToSearch.iterator (); Sett matchingStrings = ny HashSet (Arrays.asList ("a", "c", "9")); Listeresultat = ny ArrayList (); mens (it.hasNext ()) {String s = it.next (); hvis (matchingStrings.contains (s)) {result.add (s); }}

5.2. Søker etter en sortert liste

Hvis du har en sortert matrise, kan du bruke en binær søkealgoritme som fungerer raskere enn lineært søk:

Listekopi = ny ArrayList (stringsToSearch); Collections.sort (kopi); int index = Collections.binarySearch (kopi, "f"); assertThat (indeks, ikke (equalTo (-1)));

Legg merke til at hvis et element ikke blir funnet, blir -1 returnert.

6. Fjern elementene fra ArrayList

For å fjerne et element, bør du finne indeksen og bare deretter utføre fjerningen via fjerne() metode. En overbelastet versjon av denne metoden, som godtar et objekt, søker etter det og utfører fjerning av den første forekomsten av et like element:

Liste liste = ny ArrayList (IntStream.range (0, 10) .boxed (). Samle (toCollection (ArrayList :: ny))); Collections.reverse (liste); list.remove (0); assertThat (list.get (0), equalTo (8)); list.remove (Integer.valueOf (0)); assertFalse (list.contains (0));

Men vær forsiktig når du arbeider med boksetyper som Heltall. For å fjerne et bestemt element, bør du først rute int verdi eller på annen måte, blir et element fjernet av indeksen.

Du kan like godt bruke det nevnte Stream API for å fjerne flere ting, men vi vil ikke vise det her. For dette formålet vil vi bruke en iterator:

Sett matchingStrings = HashSet (Arrays.asList ("a", "b", "c", "d", "e", "f")); Iterator it = stringsToSearch.iterator (); while (it.hasNext ()) {if (matchingStrings.contains (it.next ())) {it.remove (); }}

7. Oppsummering

I denne raske artikkelen så vi på ArrayList i Java.

Vi viste hvordan vi kan lage en ArrayList for eksempel hvordan du legger til, finner eller fjerner elementer ved hjelp av forskjellige tilnærminger.

Som vanlig kan du finne alle kodeeksemplene på GitHub.


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