I Array i ArrayList su indeksne strukture podataka koje se često koriste u programima Java. Koncepcijski gledano, ArrayList interno podupire nizove, međutim, razumijevanje razlike između njih je ključ za postati sjajan Java programer. Sasvim je osnovni korak za početak, posebno početnicima koji su tek započeli kodiranje. Iako se oba koriste za spremanje elemenata u Javi, koji mogu biti ili primitivi ili objekti, oni imaju svoj udio razlika u pogledu funkcionalnosti i performansi. Glavna razlika između njih je ta što je Array statičan, dok je ArrayList dinamične prirode. Ovaj članak uspoređuje ta dva različita aspekta tako da možete odabrati jedan iznad drugog.
Jedna od glavnih i vidljivih razlika između dvije strukture podataka je ta što je Array statičke prirode, što znači da je riječ o vrsti podataka fiksne duljine, dok je ArrayList dinamičke prirode, što znači da je to struktura podataka promjenjive duljine. Tehnički gledano, duljina Array se ne može mijenjati ili mijenjati nakon stvaranja Array objekta. Sadrži uzastopno prikupljanje elemenata iste vrste podataka. Nizovi na Javi djeluju drugačije nego što rade u C / C ++. ArrayList, s druge strane, može sam promijeniti veličinu i nizovi mogu rasti po potrebi. Kako je to dinamička struktura podataka, elementi se mogu dodavati i uklanjati s popisa.
Ne možete stvoriti nize generičkih klasa sučelja u Javi, tako da nizovi i generičari ne idu ruku pod ruku, što onemogućuje stvaranje generičkog niza iz jednog osnovnog razloga što su nizovi kovarijantni dok su generike invarijantne. Iako je Array struktura podataka fiksne duljine, ona sadrži objekte iste klase ili primitive određenog tipa podataka. Dakle, ako pokušate pohraniti drugačiju vrstu podataka osim one koja je navedena tijekom stvaranja Array objekta, ona jednostavno baca "ArrayStoreException". ArrayList, s druge strane, podržava Generics kako bi se osigurala sigurnost tipa.
Primarni tipovi podataka kao što su int, double, long i char nisu dopušteni u ArrayListu. Radije drži predmete, a primitivi se ne smatraju objektima na Javi. Nizovi, s druge strane, mogu držati primitive kao i predmete u Javi jer je to jedna od najučinkovitijih struktura podataka u Javi za spremanje objekata. To je agregirani tip podataka koji je dizajniran za držanje objekata koji mogu biti bilo istog ili različitog tipa.
Da bi dobio duljinu Array, kôd treba pristupiti atributu length, jer mora znati duljinu za obavljanje operacija na Arrayu. Dok ArrayList koristi veličinu () metodu za određivanje veličine ArrayList, poprilično se razlikuje od određivanja duljine Array. Atribut metode size () određuje broj elemenata u ArrayListu, što zauzvrat predstavlja kapacitet ArrayList-a.
Na primjer:
javna klasa ArrayLengthTest
javni statički void main (String [] args)
ArrayList arrList = novi ArrayList ();
String [] items = "Jedan", "Dvije", "Tri";
za (String str: items)
arrList.add (STR);
int size = items.size ();
Sustava (veličina);
Array je izvorna programska komponenta u Javi koja se dinamički kreira i oni koriste operater dodjele za držanje elemenata, dok ArrayList koristi atribut add () za umetanje elemenata. ArrayList je klasa iz okvira kolekcije na Javi koja koristi skup određenih metoda za pristup i izmjenu elemenata. Veličina ArrayList-a može se dinamički povećavati ili smanjivati. Elementi u nizu pohranjuju se u neprekidno memorijsko mjesto i njegova veličina ostaje statična u cijeloj.
Iako obje strukture podataka pružaju slične performanse kao što ArrayList podržava Arrays, jedna ima malo više prednosti nad drugom, uglavnom u pogledu vremena i procesora memorije. Recimo, ako znate veličinu polja, vjerovatno je da ćete ići s ArrayListom. Međutim, ponavljanje preko Array je malo brže od ponavljanja preko ArrayLista. Ako program uključuje veliki broj primitiva, niz će se ponašati značajno bolje nego ArrayList, u pogledu vremena i memorije. Nizovi su programski jezik niske razine koji se može koristiti u kolekcijama. Međutim, performanse mogu varirati ovisno o operaciji koju izvodite.
red | ArrayList |
Niz je struktura podataka fiksne duljine čija se duljina ne može mijenjati nakon što se stvori objekt matrice. | ArrayList je dinamične prirode što znači da može promijeniti veličinu da raste kako treba. |
Veličina polja ostaje statična u cijelom programu. | Veličina ArrayLista može dinamički rasti ovisno o opterećenju i kapacitetu. |
Za pohranu elemenata koristi operator dodjele. | Za dodavanje elemenata koristi atribut add (). |
Može sadržavati primitive kao i predmete iste ili različite vrste podataka. | Primitivi nisu dopušteni u ArrayListu. Može sadržavati samo vrste objekata. |
Nizovi i generičari ne idu ruku pod ruku. | Generički proizvodi dopušteni su u ArrayListu. |
Nizovi mogu biti višedimenzionalni. | ArrayList je jednodimenzionalni. |
To je izvorna programska komponenta u kojoj su elementi pohranjeni u neprekidnim memorijskim mjestima. | To je klasa iz kolekcijskog okvira Jave u kojoj se objekti nikada ne pohranjuju na neposredna mjesta. |
Promjena dužine koristi se za određivanje duljine Array. | Za određivanje veličine ArrayList koristi se metoda size (). |
Za pohranu određenih elemenata ili objekata uzima manje memorije nego ArrayList. | Za pohranu objekata uzima više memorije nego Array. |
Iteracija preko polja je brža od iteriranja preko ArrayLista. | Iteriranje preko ArrayLista znatno je sporije u pogledu performansi. |
Iako neki mogu misliti da implementacija nizova u program može postići rezultate brže nego što to isto rade s ArrayListima iz jednostavnog razloga što su nizovi struktura podataka niske razine, performanse mogu varirati ovisno o operaciji koju izvodite. Pa, duljina Array je fiksna, dok se veličina ArrayList može dinamički povećavati ili smanjivati, pa ArrayList ima malo prednosti nad Arrayom u smislu funkcionalnosti. Međutim, usprkos razlikama, imaju i neke sličnosti. Obje su bazirane na indeksnim strukturama podataka na Javi koje omogućuju pohranjivanje objekata i obje omogućuju nulte vrijednosti kao i duplikate. Pa, ako unaprijed znate veličinu objekata, trebali biste ići s nizom, a ako niste sigurni u veličinu, idite s ArrayList.