Kapaciteten af ​​en ArrayList versus størrelsen af ​​en Array i Java

1. Oversigt

Java giver os mulighed for at oprette arrays af fast størrelse eller bruge samlingsklasser til at udføre et lignende job.

I denne vejledning skal vi se på forskellen mellem kapaciteten på en ArrayList og størrelsen på en matrix.

Vi ser også på eksempler på, hvornår vi skal initialisere ArrayList med en kapacitet og fordele og ulemper med hensyn til hukommelsesforbrug.

2. Eksempel

Lad os først prøve begge muligheder for at forstå forskellene.

2.1. Størrelse af en matrix

I java er det obligatorisk at specificere størrelsen på et array, mens du opretter en ny forekomst af det:

Heltal [] array = nyt Heltal [100]; System.out.println ("Størrelse af en matrix:" + array.længde);

Her oprettede vi en jegnteger array af størrelse 100, hvilket resulterede i nedenstående output

Størrelse af en matrix: 100

2.2. Kapacitet af en ArrayList

Lad os nu oprette en ArrayList med en indledende kapacitet på 100:

Liste liste = ny ArrayList (100); System.out.println ("Størrelsen på listen er:" + list.size ());
Størrelsen på listen er: 0

Da der ikke er tilføjet nogen elementer endnu, er størrelsen nul.

Lad os nu tilføje et element til listen og kontrollere størrelsen på det:

list.add (10); System.out.println ("Størrelsen på listen er:" + list.størrelse ());
Størrelsen på listen er: 1

3. Størrelse i arrays vs. ArrayList

Nedenfor er nogle store forskelle mellem størrelsen på en matrix og kapaciteten på en ArrayList.

3.1. Ændring af størrelse

Arrays er i fast størrelse. Når vi initialiserer arrayet med nogle int værdi som størrelse, kan den ikke ændres. Størrelsen og kapaciteten er lig med hinanden.

ArrayList'S størrelse og kapacitet er ikke fast. Den logiske størrelse på listen ændres baseret på indsættelse og fjernelse af elementer i den. Dette administreres separat fra dets fysiske lagerstørrelse. Også når tærsklen på ArrayList kapacitet er nået, øger den sin kapacitet til at give plads til flere elementer.

3.2. Hukommelsesallokering

Matrixhukommelse tildeles ved oprettelsen. Når vi initialiserer et array, fordeler det hukommelsen i henhold til størrelsen og typen af ​​en array. Det initialiserer alle elementerne med en nul værdi for referencetyper og standardværdien for primitive typer.

ArrayList ændrer hukommelsestildeling, når den vokser. Når vi specificerer kapaciteten under initialisering af ArrayList, det tildeler nok hukommelse til at gemme objekter op til den kapacitet. Den logiske størrelse forbliver 0. Når det er tid til at udvide kapaciteten, oprettes et nyt, større array, og værdierne kopieres til det.

Vi skal bemærke, at der er en speciel singleton 0-størrelse array til tom ArrayList objekter, hvilket gør dem meget billige at skabe. Det er også værd at bemærke det ArrayList bruger internt en række objektreferencer.

4. Hvornår skal initialiseres? ArrayList med kapacitet

Vi kan forvente at initialisere kapaciteten på et ArrayList når vi kender dens krævede størrelse, før vi opretter den, men det er normalt ikke nødvendigt. Der er dog nogle få grunde til, at dette kan være den bedste løsning.

4.1. Bygning af et stort ArrayList

Det er godt at initialisere en liste med en indledende kapacitet, når vi ved, at den bliver stor. Dette forhindrer nogle dyre vækstoperationer, når vi tilføjer elementer.

Tilsvarende, hvis listen er meget stor, kan de automatiske vækstoperationer allokere mere hukommelse end nødvendigt til den nøjagtige maksimale størrelse. Dette skyldes, at mængden, der skal vokse hver gang, beregnes som en andel af størrelsen hidtil. Så med store lister kan dette resultere i spild af hukommelse.

4.2. Bygning af flere små ArrayLists

Hvis vi har mange små samlinger, så er den automatiske kapacitet af en ArrayList kan give en stor procentdel af spildt hukommelse. Lad os sige det ArrayList foretrækker en størrelse på 10 med mindre antal elementer, men vi gemmer kun 2 eller 3. Det betyder 70% spildt hukommelse, hvilket måske betyder noget, hvis vi har et stort antal af disse lister.

Indstilling af kapacitet på forhånd kan undgå denne situation.

5. Undgå affald

Det skal vi bemærke ArrayList er en god løsning til en beholder med fleksible størrelser af objekter, der skal understøtte tilfældig adgang. Det bruger lidt mere hukommelse end et array, men giver et rigere sæt operationer.

I nogle brugssager, især omkring store samlinger af primitive værdier, kan standardarrayet være hurtigere og bruge mindre hukommelse.

Til lagring af et variabelt antal elementer, der ikke er nødvendigt at få adgang til med indeks, til lagring LinkedList kan være mere performant. Det kommer ikke med nogen omkostninger til hukommelsesstyring.

6. Resume

I denne korte artikel så vi forskellen mellem kapaciteten på ArrayList og størrelsen på en matrix. Vi kiggede også på, hvornår vi skulle initialisere ArrayList med kapacitet og dens fordele med hensyn til hukommelsesforbrug og ydeevne.

Som altid er eksempelkoden tilgængelig på GitHub.


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