Legge til et element i en Java Array vs en ArrayList

1. Oversikt

I denne opplæringen vil vi kort se på likhetene og ulikhetene i minnetildeling mellom Java-arrays og standarden ArrayList. Videre vil vi se hvordan du legger til og setter inn elementer i en matrise og ArrayList.

2. Java Arrays og ArrayList

En Java-matrise er en grunnleggende datastruktur levert av språket. I motsetning, ArrayList er en implementering av Liste grensesnitt støttet av en matrise og er gitt i Java Collections Framework.

2.1. Få tilgang til og endre elementer

Vi kan få tilgang til og endre matriseelementer ved å bruke firkantede parenteser:

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

På den andre siden, ArrayList har et sett med metoder for å få tilgang til og endre elementer:

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

2.2. Fast vs dynamisk størrelse

En matrise og ArrayList begge tildeler haugeminne på en lignende måte, men det som er forskjellig er det en matrise har fast størrelse, mens størrelsen på en ArrayList øker dynamisk.

Siden en Java-matrise er i fast størrelse, må vi oppgi størrelsen mens du instantierer den. Det er ikke mulig å øke størrelsen på matrisen når den er instantiert. I stedet må vi lage en ny matrise med den justerte størrelsen og kopiere alle elementene fra den forrige matrisen.

ArrayList er en størrelsesbestemmelse for implementering av Liste grensesnitt - det vil si ArrayList vokser dynamisk når elementer blir lagt til den. Når antall nåværende elementer (inkludert det nye elementet som skal legges til i ArrayList) er større enn den maksimale størrelsen på den underliggende matrisen, deretter ArrayList øker størrelsen på den underliggende matrisen.

Vekststrategien for den underliggende matrisen avhenger av implementeringen av ArrayList. Men siden størrelsen på den underliggende matrisen ikke kan økes dynamisk, opprettes en ny matrise, og de gamle matriseelementene kopieres til den nye matrisen.

Tilleggsoperasjonen har en konstant amortisert tidskostnad. Med andre ord, legge til n elementer til en ArrayList krever På) tid.

2.3. Elementtyper

En matrise kan inneholde primitive så vel som ikke-primitive datatyper, avhengig av definisjonen av matrisen. Derimot, en ArrayList kan bare inneholde ikke-primitive datatyper.

Når vi setter inn elementer med primitive datatyper i en ArrayList, konverterer Java-kompilatoren automatisk den primitive datatypen til den tilsvarende objektinnpakningsklassen.

La oss nå se på hvordan du legger til og setter inn elementer i Java-arrays og ArrayList.

3. Legge til et element

Som vi allerede har sett, matriser er av fast størrelse.

Så for å legge til et element må vi først erklære en ny matrise som er større enn den gamle matrisen og kopiere elementene fra den gamle matrisen til den nyopprettede matrisen. Etter det kan vi legge det nye elementet til denne nyopprettede matrisen.

La oss se på implementeringen i Java uten å bruke verktøyklasser:

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 kan den Arrays klasse gir en verktøymetode kopi av(), som hjelper til med å lage en ny matrise av større størrelse og kopiere alle elementene fra den gamle matrisen:

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

Når vi har opprettet en ny matrise, kan vi enkelt legge det nye elementet til matrisen:

destArray [destArray.length - 1] = elementToAdd;

På den andre siden, legge til et element i ArrayList er ganske enkelt:

anArrayList.add (newElement);

4. Sette inn et element i indeksen

Å sette inn et element i en gitt indeks uten å miste de elementene som er lagt til tidligere, er ikke en enkel oppgave i matriser.

Først og fremst, hvis matrisen allerede inneholder antall elementer som er lik størrelsen, må vi først opprette en ny matrise med større størrelse og kopiere elementene til den nye matrisen.

Videre må vi flytte alle elementene som kommer etter den angitte indeksen med en posisjon til høyre:

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; } annet {destArray [i] = srcArray [j]; j ++; }} returner destArray; }

Imidlertid, den ArrayUtils klasse gir oss en enklere løsning for å sette inn elementer i en matrise:

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

Vi må spesifisere indeksen der vi vil sette inn verdien, kildearrisen og verdien som skal settes inn.

De sett inn() metoden returnerer en ny matrise som inneholder et større antall elementer, med det nye elementet ved den angitte indeksen og alle gjenværende elementer forskjøvet en posisjon til høyre.

Merk at det siste argumentet til sett inn() metoden er et variabelt argument, slik at vi kan sette inn et hvilket som helst antall elementer i en matrise.

La oss bruke den til å sette inn tre elementer i srcArray starter ved indeks to:

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

Og de resterende elementene blir flyttet tre steder til høyre.

Videre kan dette oppnås trivielt for ArrayList:

anArrayList.add (indeks, newElement);

ArrayList forskyver elementene og setter inn elementet på ønsket sted.

5. Konklusjon

I denne artikkelen så vi på Java-array og ArrayList. Videre så vi på likhetene og forskjellene mellom de to. Til slutt så vi hvordan vi kan legge til og sette inn elementer i en matrise og ArrayList.

Som alltid er den fullstendige kildekoden til arbeidseksemplene tilgjengelig på GitHub.


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