Java >> Java tutorial >  >> Tag >> ArrayList

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

1. Oversigt

I denne øvelse vil vi kort se på lighederne og ulighederne i hukommelsesallokering mellem Java-arrays og standard ArrayList . Desuden vil vi se, hvordan man tilføjer og indsætter elementer i et array og ArrayList .

2. Java Arrays og ArrayList

Et Java-array er en grundlæggende datastruktur leveret af sproget. I modsætning hertil ArrayList er en implementering af Listen interface understøttet af et array og leveres i Java Collections Framework.

2.1. Adgang til og ændring af elementer

Vi kan få adgang til og ændre array-elementer ved at bruge notationen med 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 vs dynamisk størrelse

Et array og ArrayList begge tildeler heap-hukommelse på en lignende måde, men hvad der adskiller sig er, at en matrix har fast størrelse, mens størrelsen af ​​en ArrayList øges dynamisk.

Da et Java-array er af fast størrelse, skal vi angive størrelsen, mens vi instansierer det. Det er ikke muligt at øge størrelsen af ​​arrayet, når det først er blevet instansieret. I stedet skal vi oprette et nyt array med den justerede størrelse og kopiere alle elementerne fra det tidligere array.

ArrayList er en array-implementering, der kan ændres størrelse af Listen grænseflade — det vil sige ArrayList vokser dynamisk, efterhånden som elementer føjes til den. Når antallet af nuværende elementer (inklusive det nye element, der skal tilføjes til ArrayList ) er større end den maksimale størrelse af dets underliggende array, derefter ArrayList øger størrelsen af ​​det underliggende array.

Vækststrategien for det underliggende array afhænger af implementeringen af ​​ArrayList . Men da størrelsen af ​​det underliggende array ikke kan øges dynamisk, oprettes et nyt array, og de gamle array-elementer kopieres ind i det nye array.

Add-operationen har en konstant amortiseret tidsomkostning. Med andre ord, tilføjelse af n elementer til en ArrayList kræver O(n) tid.

2.3. Elementtyper

Et array kan indeholde primitive såvel som ikke-primitive datatyper, afhængigt af arrayets definition. Dog en ArrayList kan kun indeholde ikke-primitive datatyper .

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

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

3. Tilføjelse af et element

Som vi allerede har set, er arrays 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 tilføje det nye element til dette nyoprettede array.

Lad os se på dens implementering 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;
    return destArray;
}

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

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

Når vi har oprettet et nyt array, kan vi nemt tilføje det nye element til arrayet:

destArray[destArray.length - 1] = elementToAdd;

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

anArrayList.add(newElement);

4. Indsættelse af et element ved indeks

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

Først og fremmest, hvis arrayet allerede indeholder antallet af elementer svarende til dets størrelse, så skal vi først oprette et nyt array med en større størrelse og kopiere elementerne over til det nye array.

Desuden skal vi flytte alle elementer, der kommer efter det angivne indeks, med én position til højre:

public static 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;
        } else {
            destArray[i] = srcArray[j];
            j++;
        }
    }
    return destArray;
}

Men ArrayUtils klasse giver os en enklere løsning til at indsætte elementer i et array :

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

Vi skal angive det indeks, som vi vil indsætte værdien ved, kildearrayet og værdien, der skal indsættes.

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

Bemærk, at det sidste argument i insert() metode er et variabelt argument, så vi kan indsætte et hvilket som helst 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 vil blive flyttet tre steder til højre.

Desuden kan dette opnås trivielt for ArrayList :

anArrayList.add(index, newElement);

ArrayList flytter elementerne og indsætter elementet på den ønskede placering.

5. Konklusion

I denne artikel kiggede vi på Java-array og ArrayList . Derudover så vi på lighederne og forskellene mellem de to. Til sidst så vi, hvordan man tilføjer og indsætter elementer i et array og ArrayList .

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


Java tag