Nizovi vs Arraylists
Nizovi su najčešće korištena struktura podataka za pohranu zbirke elemenata. Većina programskih jezika nudi metode za jednostavno deklariranje nizova i pristup elementima u nizovima. Arraylist se može promatrati kao dinamički niz koji može rasti u veličini. Iz tog razloga, programer ne mora znati veličinu arraylist-a kada ga definira.
Što su nizovi?
Prikazano na slici 1 je dio koda koji se obično koristi za deklariranje i dodjeljivanje vrijednosti nizu. Slika 2 prikazuje kako bi niz izgledao u memoriji.
int vrijednosti[5]; vrijednosti[0]=100; vrijednosti[1]=101; vrijednosti[2]=102; vrijednosti[3]=103; vrijednosti[4]=104; |
Slika 1: Kod za deklariranje i dodjeljivanje vrijednosti nizu
100 | 101 | 102 | 103 | 104 |
Indeks: 0 | 1 | 2 | 3 | 4 |
Slika 2: Niz pohranjen u memoriji
Gornji kod, definira niz koji može pohraniti 5 cijelih brojeva i njima se pristupa pomoću indeksa od 0 do 4. Jedno važno svojstvo niza je da je cijeli niz dodijeljen kao jedan blok memorije i svaki element dobiva svoj vlastiti prostor u nizu. Nakon što je niz definiran, njegova veličina je fiksna. Dakle, ako niste sigurni u veličinu polja u vrijeme kompajliranja, morali biste definirati dovoljno veliko polje da biste bili sigurni. Ali, većinu vremena, zapravo ćemo koristiti manji broj elemenata nego što smo dodijelili. Dakle, znatna količina memorije je zapravo izgubljena. S druge strane, ako "dovoljno velik niz" zapravo nije dovoljno velik, program bi se srušio.
Što su Arraylists?
Popis polja može se promatrati kao dinamički niz koji može rasti u veličini. Stoga su arraylisti idealni za korištenje u situaciji u kojoj ne znate veličinu elemenata potrebnih u trenutku deklaracije. U Javi, popisi polja mogu sadržavati samo objekte, ne mogu izravno sadržavati primitivne tipove (možete staviti primitivne tipove unutar objekta ili koristiti klase omotača primitivnih tipova). Općenito, arraylists imaju metode za izvođenje umetanja, brisanja i pretraživanja. Vremenska složenost pristupa elementu je o(1), dok umetanje i brisanje ima vremensku složenost o(n). U Javi, arraylists se mogu proći korištenjem foreach petlji, iteratora ili jednostavno korištenjem indeksa.
Koja je razlika između Arrays i Arraylists
Iako su nizovi i popisi nizova slični u smislu da se oboje koriste za pohranu kolekcija elemenata, razlikuju se u načinu na koji su definirani. Veličina niza mora biti navedena kada je niz definiran, ali možete definirati arraylist bez znanja stvarne veličine. Možete dodavati elemente u arraylist nakon što je definiran, a to nije moguće s nizovima. Ali u Javi, popisi polja ne mogu sadržavati primitivne tipove, ali se polja mogu koristiti za držanje primitivnih tipova. Ali ako trebate strukturu podataka koja može varirati svoju veličinu, arraylist bi bio najbolji izbor.