Dodavanje elementa Java nizu vs ArrayList

1. Pregled

U ovom uputstvu ukratko ćemo pogledati sličnosti i razlike u dodjeli memorije između Java nizova i standarda ArrayList. Nadalje, vidjet ćemo kako dodati i umetnuti elemente u niz i ArrayList.

2. Java nizovi i ArrayList

Java niz je osnovna struktura podataka koju pruža jezik. U kontrastu, ArrayList je provedba Popis sučelje potpomognuto nizom i pruža se u okviru Java Collections Framework.

2.1. Pristup i izmjena elemenata

Elementima polja možemo pristupiti i izmijeniti ih pomoću oznake uglatih zagrada:

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

S druge strane, ArrayList ima skup metoda za pristup i izmjenu elemenata:

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

2.2. Fiksna vs dinamička veličina

Niz i ArrayList oboje dodijeljuju hrpu memorije na sličan način, ali ono što se razlikuje je to niz je fiksne veličine, dok je veličina ArrayList dinamički se povećava.

Budući da je Java niz fiksne veličine, trebamo navesti veličinu tijekom instanciranja. Nije moguće povećati veličinu niza nakon što je instanciran. Umjesto toga, moramo stvoriti novi niz s prilagođenom veličinom i kopirati sve elemente iz prethodnog niza.

ArrayList je promjenjiva implementacija niza Popis sučelje - to jest, ArrayList dinamički raste kako mu se dodaju elementi. Kada broj trenutnih elemenata (uključujući novi element koji se dodaje u ArrayList) veća je od maksimalne veličine osnovnog niza, a zatim je ArrayList povećava veličinu temeljnog niza.

Strategija rasta temeljnog niza ovisi o provedbi ArrayList. Međutim, budući da se veličina osnovnog niza ne može dinamički povećavati, stvara se novi niz i stari elementi polja kopiraju se u novi niz.

Operacija zbrajanja ima stalni amortizirani vremenski trošak. Drugim riječima, dodavanje n elementi na an ArrayList zahtijeva Na) vrijeme.

2.3. Vrste elemenata

Niz može sadržavati primitivne kao i neprimitivne vrste podataka, ovisno o definiciji niza. Međutim, an ArrayList može sadržavati samo neprimitivne vrste podataka.

Kada umetnemo elemente s primitivnim vrstama podataka u ArrayList, Java prevodilac automatski pretvara primitivni tip podataka u odgovarajuću klasu omotača objekata.

Pogledajmo sada kako dodati i umetnuti elemente u Java nizove i ArrayList.

3. Dodavanje elementa

Kao što smo već vidjeli, nizovi su fiksne veličine.

Dakle, da bismo dodali element, prvo moramo deklarirati novi niz koji je veći od starog niza i kopirati elemente iz starog niza u novostvoreni niz. Nakon toga možemo dodati novi element ovom novostvorenom nizu.

Pogledajmo njegovu implementaciju u Javi bez upotrebe klasa uslužnih programa:

javni Integer [] addElementUsingPureJava (Integer [] srcArray, int elementToAdd) {Integer [] destArray = novi cijeli broj [srcArray.length + 1]; za (int i = 0; i <srcArray.length; i ++) {destArray [i] = srcArray [i]; } destArray [destArray.length - 1] = elementToAdd; vratiti destArray; }

Naizmjenično, Nizovi klasa pruža korisnu metodu kopija od(), koji pomaže u stvaranju novog niza veće veličine i kopiranju svih elemenata iz starog niza:

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

Nakon što stvorimo novi niz, možemo lako dodati novi element nizu:

destArray [destArray.length - 1] = elementToAdd;

S druge strane, dodavanjem elementa u ArrayList je prilično lako:

anArrayList.add (newElement);

4. Umetanje elementa u indeks

Umetanje elementa u zadani indeks bez gubitka prethodno dodanih elemenata nije jednostavan zadatak u nizovima.

Prije svega, ako niz već sadrži broj elemenata jednak njegovoj veličini, prvo trebamo stvoriti novi niz veće veličine i kopirati elemente u novi niz.

Nadalje, sve elemente koji dolaze nakon navedenog indeksa moramo pomaknuti za jedan položaj udesno:

javni statički int [] insertAnElementAtAGivenIndex (konačni int [] srcArray, int indeks, int newElement) {int [] destArray = novi 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; }

Međutim ArrayUtils klasa daje nam jednostavnije rješenje za umetanje predmeta u niz:

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

Moramo odrediti indeks u koji želimo umetnuti vrijednost, izvorni niz i vrijednost za umetanje.

The umetnuti() metoda vraća novi niz koji sadrži veći broj elemenata, s tim da je novi element na navedenom indeksu, a svi preostali elementi pomaknuti su za jedan položaj udesno.

Imajte na umu da je posljednji argument umetnuti() metoda je argument varijable, tako da u niz možemo umetnuti bilo koji broj stavki.

Upotrijebimo ga za umetanje tri elementa u srcArray počevši od indeksa dva:

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

A preostali elementi bit će pomaknuti tri mjesta udesno.

Nadalje, to se može trivijalno postići za ArrayList:

anArrayList.add (indeks, noviElement);

ArrayList pomiče elemente i ubacuje element na traženo mjesto.

5. Zaključak

U ovom smo članku pogledali Java niz i ArrayList. Nadalje, pogledali smo sličnosti i razlike između njih dvoje. Napokon smo vidjeli kako dodati i umetnuti elemente u niz i ArrayList.

Kao i uvijek, puni izvorni kod radnih primjera dostupan je na GitHub-u.