Vejledning til Java ArrayList

1. Oversigt

I denne artikel vil vi se på ArrayList klasse fra Java Collections Framework. Vi diskuterer dens egenskaber, almindelige anvendelsestilfælde samt dens fordele og ulemper.

ArrayList ligger inden for Java Core Libraries, så du behøver ikke yderligere biblioteker. For at bruge det skal du blot tilføje følgende importerklæring:

importere java.util.ArrayList;

Liste repræsenterer en ordnet rækkefølge af værdier, hvor en værdi kan forekomme mere end én gang.

ArrayList er en af Liste implementeringer bygget oven på en matrix, som er i stand til dynamisk at vokse og krympe, når du tilføjer / fjerner elementer. Elementer kunne let åbnes med deres indekser startende fra nul. Denne implementering har følgende egenskaber:

  • Tilfældig adgang tager O (1) tid
  • Tilføjelse af element tager afskrevet konstant tid O (1)
  • Indsættelse / sletning tager På) tid
  • Søgning tager På) tid til usorteret array og O (log n) for en sorteret

2. Opret en ArrayList

ArrayList har flere konstruktører, og vi vil præsentere dem alle i dette afsnit.

Bemærk først det ArrayList er en generisk klasse, så du kan parametrere den med hvilken som helst type, og compileren vil sikre, at du for eksempel ikke er i stand til at sætte Heltal værdier inde i en samling af Strenge. Du behøver heller ikke at caste elementer, når du henter dem fra en samling.

For det andet er det god praksis at bruge generisk interface Liste som en variabel type, fordi den afkobler den fra en bestemt implementering.

2.1. Standard No-Arg Constructor

Liste liste = ny ArrayList (); assertTrue (list.isEmpty ());

Vi opretter simpelthen en tom ArrayList eksempel.

2.2. Konstruktør, der accepterer startkapacitet

Liste liste = ny ArrayList (20);

Her angiver du den indledende længde på et underliggende array. Dette kan hjælpe dig med at undgå unødvendig størrelse, mens du tilføjer nye emner.

2.3. Konstruktør accepterer Kollektion

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

Bemærk, at elementet i Kollektion instans bruges til at udfylde det underliggende array.

3. Føj elementer til ArrayList

Du kan indsætte et element enten i slutningen eller i den specifikke position:

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

Du kan også indsætte en samling eller flere elementer på én gang:

Liste liste = 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

Der findes to typer iteratorer: Iterator og ListIterator.

Mens førstnævnte giver dig mulighed for at krydse listen i en retning, giver sidstnævnte dig mulighed for at krydse den i begge retninger.

Her viser vi kun dig ListIterator:

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

Du kan også søge, tilføje eller fjerne elementer ved hjælp af iteratorer.

5. Søg i ArrayList

Vi demonstrerer, hvordan søgning fungerer ved hjælp af en samling:

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

5.1. Søgning efter en usorteret liste

For at finde et element, du kan bruge indeks af() eller lastIndexOf () metoder. De accepterer begge et objekt og vender tilbage int værdi:

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

Hvis du vil finde alle elementer, der tilfredsstiller et prædikat, kan du filtrere samling ved hjælp af Java 8 Stream API (læs mere om det her) ved hjælp af Prædikat sådan her:

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

Det er også muligt at bruge en til loop eller en iterator:

Iterator it = stringsToSearch.iterator (); Indstil 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øgning efter en sorteret liste

Hvis du har et sorteret array, kan du bruge en binær søgealgoritme, der fungerer hurtigere end lineær søgning:

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

Bemærk, at hvis et element ikke findes, returneres -1.

6. Fjern elementerne fra ArrayList

For at fjerne et element skal du finde dets indeks og først derefter udføre fjernelsen via fjerne() metode. En overbelastet version af denne metode, der accepterer et objekt, søger efter det og udfører fjernelse af den første forekomst af et lige element:

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

Men vær forsigtig, når du arbejder med boksetyper som f.eks Heltal. For at fjerne et bestemt element skal du først markere int værdi eller på anden måde fjernes et element med dets indeks.

Du kan lige så godt bruge ovennævnte Stream API for at fjerne flere ting, men vi viser det ikke her. Til dette formål bruger vi en iterator:

Indstil 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. Resume

I denne hurtige artikel kiggede vi på ArrayList i Java.

Vi viste, hvordan man opretter en ArrayList eksempel, hvordan man tilføjer, finder eller fjerner elementer ved hjælp af forskellige tilgange.

Som sædvanligt kan du finde alle kodeeksemplerne på GitHub.


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