Tilføjelse af et element til en Java Array vs en ArrayList

1. Oversigt

I denne vejledning ser vi kort på ligheder og forskelle i hukommelsesallokering mellem Java-arrays og standarden ArrayList. Desuden vil vi se, hvordan man tilføjer og indsætter elementer i en matrix og ArrayList.

2. Java Arrays og ArrayList

Et Java-array er en grundlæggende datastruktur, der leveres af sproget. I modsætning, ArrayList er en implementering af Liste interface understøttet af en matrix og findes i Java Collections Framework.

2.1. Adgang til og ændring af elementer

Vi kan få adgang til og ændre matrixelementer ved hjælp af firkantede parenteser:

System.out.println (anArray [1]); anArray [1] = 4;

På den anden side, ArrayList har et sæt metoder til at få adgang til og ændre elementer:

int n = anArrayList.get (1); anArrayList.set (1, 4);

2.2. Fast versus dynamisk størrelse

Et array og ArrayList begge tildeler bunkehukommelse på en lignende måde, men hvad der adskiller sig er det en matrix er i fast størrelse, mens størrelsen på en ArrayList stiger dynamisk.

Da et Java-array er i fast størrelse, er vi nødt til at angive størrelsen, mens vi instantierer den. Det er ikke muligt at øge størrelsen på arrayet, når det er blevet instantificeret. I stedet skal vi oprette en ny matrix med den justerede størrelse og kopiere alle elementerne fra den tidligere matrix.

ArrayList er en størrelse, der kan tilpasses array implementering af Liste interface - det vil sige ArrayList vokser dynamisk, når elementer føjes til det. Når antallet af aktuelle elementer (inklusive det nye element, der skal føjes til ArrayList) er større end den maksimale størrelse på dens underliggende matrix, så er ArrayList øger størrelsen på det underliggende array.

Vækststrategien for det underliggende array afhænger af implementeringen af ArrayList. Da størrelsen på den underliggende matrix ikke kan øges dynamisk, oprettes der imidlertid en ny matrix, og de gamle matrixelementer kopieres til den nye matrix.

Tilføjelsen har en konstant amortiseret tidsomkostning. Med andre ord tilføje n elementer til en ArrayList kræver På) tid.

2.3. Elementtyper

En matrix kan indeholde primitive såvel som ikke-primitive datatyper, afhængigt af definitionen af ​​arrayet. Imidlertid, en ArrayList kan kun indeholde ikke-primitive datatyper.

Når vi indsætter elementer med primitive datatyper i en ArrayList, konverterer Java-kompilatoren automatisk den primitive datatype til den tilsvarende objektindpakningsklasse.

Lad os nu se på, hvordan du tilføjer og indsætter elementer i Java-arrays og ArrayList.

3. Tilføjelse af et element

Som vi allerede har set, arrays er af fast størrelse.

Så for at tilføje et element skal vi først erklære et nyt array, der er større end det gamle array og kopiere elementerne fra det gamle array til det nyoprettede array. Derefter kan vi føje det nye element til dette nyoprettede array.

Lad os se på implementeringen i Java uden at bruge nogen hjælpeklasser:

public Integer [] addElementUsingPureJava (Integer [] srcArray, int elementToAdd) {Integer [] destArray = new Integer [srcArray.length + 1]; for (int i = 0; i <srcArray.length; i ++) {destArray [i] = srcArray [i]; } destArray [destArray.length - 1] = elementToAdd; returnere destArray; }

Alternativt er det Arrays klasse giver en hjælpemetode copyOf (), som hjælper med at oprette et nyt array af større størrelse og kopiere alle elementerne fra det gamle array:

int [] destArray = Arrays.copyOf (srcArray, srcArray.length + 1);

Når vi har oprettet en ny matrix, kan vi nemt føje det nye element til arrayet:

destArray [destArray.length - 1] = elementToAdd;

På den anden side, tilføje et element i ArrayList er ret let:

anArrayList.add (newElement);

4. Indsættelse af et element i indekset

At indsætte et element i et givet indeks uden at miste de tidligere tilføjede elementer er ikke en simpel opgave i arrays.

Først og fremmest, hvis matrixen allerede indeholder antallet af elementer, der svarer til dens størrelse, skal vi først oprette et nyt array med en større størrelse og kopiere elementerne til det nye array.

Desuden er vi nødt til at skifte alle elementer, der kommer efter det angivne indeks, med en position til højre:

offentlig statisk int [] insertAnElementAtAGivenIndex (final int [] srcArray, int index, int newElement) {int [] destArray = new int [srcArray.length + 1]; int j = 0; for (int i = 0; i <destArray.length-1; i ++) {if (i == index) {destArray [i] = newElement; } andet {destArray [i] = srcArray [j]; j ++; }} returner destArray; }

Men den ArrayUtils klasse giver os en enklere løsning til at indsætte emner i en matrix:

int [] destArray = ArrayUtils.insert (2, srcArray, 77);

Vi skal specificere det indeks, hvor vi vil indsætte værdien, kildearrayet og den værdi, der skal indsættes.

Det indsæt () metoden returnerer et nyt array, der indeholder et større antal elementer, med det nye element ved det angivne indeks, og alle resterende elementer forskydes en position til højre.

Bemærk, at det sidste argument i indsæt () metode er et variabelt argument, så vi kan indsætte et vilkårligt antal elementer i en matrix.

Lad os bruge det til at indsætte tre elementer i srcArray starter ved indeks to:

int [] destArray = ArrayUtils.insert (2, srcArray, 77, 88, 99);

Og de resterende elementer flyttes tre steder til højre.

Desuden kan dette opnås trivielt for ArrayList:

anArrayList.add (indeks, newElement);

ArrayList forskyder elementerne og indsætter elementet på det ønskede sted.

5. Konklusion

I denne artikel kiggede vi på Java-array og ArrayList. Desuden så vi på lighederne og forskellene mellem de to. Endelig så vi, hvordan vi tilføjede og indsatte elementer i en matrix og ArrayList.

Som altid er den fulde kildekode for arbejdseksemplerne tilgængelig på GitHub.