Arraylist vs Vector
Popis polja može se 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. Vektor se također može promatrati kao niz koji može rasti u veličini. Vektori se mogu jednostavno dodijeliti i mogu se koristiti kada potrebna veličina pohrane nije poznata do vremena izvođenja.
Što je Arraylist?
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 se arraylists može proći korištenjem foreach petlji, iteratora ili jednostavno korištenjem indeksa. U Javi su arraylists uvedeni od verzije 1.2 i dio su Java Collections Frameworka.
Što je vektor?
Vektor je također niz koji može rasti u veličini. Vektori se mogu lako dodijeliti i mogu se koristiti kada potrebna veličina pohrane nije poznata do vremena izvođenja. Vektori također mogu sadržavati samo objekte i ne mogu sadržavati primitivne tipove. Vektori su sinkronizirani, stoga se mogu sigurno koristiti u višenitnim okruženjima. Vektori imaju metode za dodavanje objekata, brisanje objekata i pretraživanje objekata. Slično arraylist-u u Javi, vektori se mogu prelaziti korištenjem foreach petlji, iteratora ili jednostavno korištenjem indeksa. Kada je riječ o Javi, vektori su uključeni od prve verzije Jave.
Koja je razlika između Arraylist i Vector?
Iako su i popisi nizova i vektori vrlo slični dinamičkim nizovima koji mogu rasti u veličini, imaju neke važne razlike. Glavna razlika između popisa nizova i vektora je u tome što su vektori sinkronizirani, dok popisi nizova nisu sinkronizirani. Stoga korištenje popisa nizova u višenitnim okruženjima neće biti prikladno, dok se vektori mogu sigurno koristiti u višenitnim okruženjima (budući da su niti sigurni). Ali sinkronizacija u vektorima uzrokovala bi smanjenje izvedbe. Stoga ne bi bila dobra ideja koristiti vektore u okruženju s jednom niti. Interno, i arraylists i vektori koriste nizove za držanje objekata. Kada trenutni prostor nije dovoljan, vektori će udvostručiti veličinu svog unutarnjeg niza, dok arraylistovi povećavaju veličinu svog unutarnjeg niza za 50%. Ali kada se koriste i arraylists i vektori, davanjem odgovarajućeg početnog kapaciteta, može se izbjeći nepotrebna promjena veličine unutarnjeg niza. U situaciji kada je poznata stopa rasta podataka, korištenje vektora bilo bi prikladnije jer bi se mogla definirati inkrementalna vrijednost vektora.