Arraylist vs Vector
Masīvu sarakstu var uzskatīt par dinamisku masīvu, kura izmērs var pieaugt. Šī iemesla dēļ programmētājam nav jāzina masīvu saraksta lielums, kad viņš/viņa to definē. Vektoru var uzskatīt arī par masīvu, kas var pieaugt. Vektorus var viegli piešķirt, un tos var izmantot gadījumos, kad nepieciešamais krātuves lielums nav zināms līdz izpildlaikam.
Kas ir masīvu saraksts?
Masīvu sarakstu var uzskatīt par dinamisku masīvu, kura izmērs var pieaugt. Tāpēc masīvu saraksti ir ideāli piemēroti lietošanai situācijās, kad deklarēšanas brīdī nezināt nepieciešamo elementu lielumu. Java programmā masīvu saraksti var saturēt tikai objektus, tie nevar tieši saturēt primitīvos tipus (varat ievietot primitīvos veidus objektā vai izmantot primitīvo tipu iesaiņojuma klases). Parasti masīvu saraksti tiek nodrošināti ar metodēm, kā veikt ievietošanu, dzēšanu un meklēšanu. Elementa piekļuves laika sarežģītība ir o(1), savukārt ievietošanas un dzēšanas laika sarežģītība ir o(n). Java masīvu sarakstus var šķērsot, izmantojot foreach cilpas, iteratorus vai vienkārši izmantojot indeksus. Java masīvu saraksti tika ieviesti no versijas 1.2, un tā ir daļa no Java kolekciju sistēmas.
Kas ir vektors?
Vector ir arī masīvs, kas var pieaugt. Vektorus var viegli piešķirt, un tos var izmantot, ja nepieciešamais krātuves lielums nav zināms līdz izpildes laikam. Vektori var saturēt tikai objektus un nevar saturēt primitīvus tipus. Vektori ir sinhronizēti, tāpēc tos var droši izmantot daudzpavedienu vidēs. Vektori ir nodrošināti ar metodēm objektu pievienošanai, objektu dzēšanai un objektu meklēšanai. Līdzīgi kā Java masīvu sarakstā, vektorus var šķērsot, izmantojot foreach cilpas, iteratorus vai vienkārši izmantojot indeksus. Runājot par Java, vektori ir iekļauti kopš pirmās Java versijas.
Kāda ir atšķirība starp Arraylist un Vector?
Lai gan masīvu saraksti un vektori ir ļoti līdzīgi dinamiskiem masīviem, kuru izmērs var pieaugt, tiem ir dažas būtiskas atšķirības. Galvenā atšķirība starp masīvu sarakstiem un vektoriem ir tā, ka vektori ir sinhronizēti, turpretim masīvu saraksti nav sinhronizēti. Tāpēc masīvu sarakstu izmantošana daudzpavedienu vidēs nebūs piemērota, savukārt vektorus var droši izmantot daudzpavedienu vidēs (jo tie ir droši pavedieniem). Bet vektoru sinhronizācija izraisītu veiktspējas samazināšanos. Tāpēc nebūtu laba ideja izmantot vektorus vienā vītņotā vidē. Iekšēji gan masīvu saraksti, gan vektori objektu turēšanai izmanto masīvus. Ja pašreizējās vietas nepietiek, vektori dubultos tā iekšējā masīva lielumu, savukārt masīvu saraksti palielinās tā iekšējā masīva izmēru par 50%. Bet, izmantojot gan masīvu sarakstus, gan vektorus, dodot piemērotu sākotnējo jaudu, var izvairīties no nevajadzīgas iekšējā masīva izmēru maiņas. Situācijā, kad ir zināms datu pieauguma temps, piemērotāk būtu izmantot vektorus, jo varētu definēt vektoru pieauguma vērtību.