Orodha ya safu dhidi ya Vekta
Orodha ya mkusanyiko inaweza kuonekana kama safu inayobadilika, ambayo inaweza kukua kwa ukubwa. Kwa sababu hii, mpangaji programu haitaji kujua saizi ya orodha wakati anaifafanua. Vekta pia inaweza kuonekana kama safu ambayo inaweza kukua kwa ukubwa. Vekta zinaweza kugawiwa kwa urahisi na zinaweza kutumika wakati ukubwa unaohitajika wa hifadhi haujulikani hadi wakati wa utekelezaji.
Arraylist ni nini?
Orodha ya mkusanyiko inaweza kuonekana kama safu inayobadilika, ambayo inaweza kukua kwa ukubwa. Kwa hivyo orodha za safu ni bora kutumika katika hali ambayo haujui saizi ya vitu vinavyohitajika wakati wa tamko. Katika Java, orodha za safu zinaweza tu kushikilia vitu, haziwezi kushikilia aina za primitive moja kwa moja (unaweza kuweka aina za zamani ndani ya kitu au kutumia madarasa ya kukunja ya aina za zamani). Kwa ujumla orodha za safu hupewa mbinu za kufanya uwekaji, kufuta na kutafuta. Utata wa wakati wa kufikia kipengele ni o(1), ilhali uwekaji na ufutaji una utata wa wakati wa o(n). Katika Java, orodha za safu zinaweza kupitiwa kwa kutumia vitanzi vya mbele, virudishio au kwa kutumia tu faharasa. Katika Java, orodha za orodha zilianzishwa kutoka toleo la 1.2 na ni sehemu ya Mfumo wa Makusanyo ya Java.
Vekta ni nini?
Vekta pia ni safu ambayo inaweza kukua kwa ukubwa. Vekta zinaweza kugawanywa kwa urahisi na zinaweza kutumika wakati ukubwa unaohitajika wa hifadhi haujulikani hadi wakati wa kukimbia. Vekta pia zinaweza kushikilia vitu tu na haziwezi kushikilia aina za zamani. Vekta zimesawazishwa, kwa hivyo zinaweza kutumika kwa usalama katika mazingira yenye nyuzi nyingi. Vectors hupewa mbinu za kuongeza vitu, kufuta vitu na kutafuta vitu. Sawa na orodha ya mkusanyiko katika java, vekta zinaweza kupitiwa kwa kutumia vitanzi vya mbele, virudiarudia au kwa kutumia faharasa tu. Inapokuja kwa Java, vekta zimejumuishwa tangu toleo la kwanza la Java.
Kuna tofauti gani kati ya Arraylist na Vekta?
Ingawa orodha zote mbili za safu na vekta zinafanana sana na safu zinazobadilika ambazo zinaweza kukua kwa ukubwa, zina tofauti fulani muhimu. Tofauti kuu kati ya arraylists na vekta ni kwamba vekta husawazishwa ilhali orodha za safu hazijasawazishwa. Kwa hiyo kutumia arraylists katika mazingira yenye nyuzi nyingi haitafaa, wakati vekta zinaweza kutumika kwa usalama katika mazingira ya multithreaded (kwa kuwa ni salama ya thread). Lakini maingiliano katika vekta inaweza kusababisha kupunguzwa kwa utendaji. Kwa hivyo haitakuwa wazo nzuri kutumia vekta katika mazingira yenye nyuzi. Kwa ndani, orodha zote mbili za safu na vekta hutumia safu kushikilia vitu. Wakati nafasi ya sasa haitoshi, vectors wataongeza ukubwa wa safu yake ya ndani mara mbili, wakati arraylists huongeza ukubwa wa safu yake ya ndani kwa 50%. Lakini wakati wa kutumia arraylists na vectors, kwa kutoa uwezo wa awali unaofaa, resizing isiyo ya lazima ya safu ya ndani inaweza kuepukwa. Katika hali ambayo kasi ya ukuaji wa data inajulikana, kutumia vekta kungefaa zaidi kwa kuwa thamani ya ongezeko la vekta inaweza kubainishwa.