Arraylist vs Vector
Arraylist možno vnímať ako dynamické pole, ktoré sa môže zväčšovať. Z tohto dôvodu programátor nemusí poznať veľkosť arraylistu, keď ho definuje. Vektor možno tiež považovať za pole, ktoré sa môže zväčšovať. Vektory môžu byť ľahko pridelené a môžu sa použiť, keď nie je známa požadovaná veľkosť úložného priestoru až do doby spustenia.
Čo je to Arraylist?
Arraylist možno vnímať ako dynamické pole, ktoré sa môže zväčšovať. Arraylisti sú preto ideálne na použitie v situáciách, keď nepoznáte veľkosť prvkov požadovaných v čase vyhlásenia. V Java môžu arraylisti držať iba objekty, nemôžu držať primitívne typy priamo (primitívne typy môžete vložiť do objektu alebo použiť triedy wrapperov primitívnych typov). Vo všeobecnosti sa arraylistom poskytujú metódy na vykonávanie inzercie, vymazania a vyhľadávania. Časová zložitosť prístupu k prvku je o (1), zatiaľ čo vloženie a vymazanie má časovú zložitosť o (n). V Jave môžu arraylisti prechádzať pomocou foreach slučiek, iterátorov alebo jednoducho pomocou indexov. V jazyku Java boli arraylisti predstavení od verzie 1.2 a je súčasťou rámca Java Collections Framework.
Čo je to Vektor?
Vektor je tiež pole, ktoré sa môže zväčšovať. Vektory môžu byť ľahko pridelené a môžu sa použiť, keď požadovaná veľkosť úložiska nie je známa až za behu. Vektory tiež môžu obsahovať iba objekty a nemôžu obsahovať primitívne typy. Vektory sú synchronizované, a preto sa môžu bezpečne používať vo viacvláknových prostrediach. Vektory sú vybavené metódami na pridávanie objektov, odstraňovanie objektov a vyhľadávanie objektov. Podobne ako v prípade arraylistu v jave, vektory sa môžu prechádzať pomocou foreach slučiek, iterátorov alebo jednoducho pomocou indexov. Pokiaľ ide o Javu, vektory boli zahrnuté od prvej verzie Java.
Aký je rozdiel medzi Arraylistom a Vectorom?
Aj keď sú arraylisti aj vektory veľmi podobné dynamickým poliam, ktoré sa môžu zväčšovať, majú určité dôležité rozdiely. Hlavný rozdiel medzi arraylistami a vektormi spočíva v tom, že vektory sú synchronizované, zatiaľ čo arraylisty sú nesynchronizované. Preto použitie arraylistov vo viacvláknových prostrediach nebude vhodné, zatiaľ čo vektory sa môžu bezpečne používať vo viacvláknových prostrediach (pretože sú bezpečné z hľadiska vlákien). Synchronizácia vo vektoroch by však spôsobila zníženie výkonu. Preto by nebolo dobré používať vektory v prostredí s jedným vláknom. Interne používajú arraylisti aj vektory polia na držanie objektov. Ak aktuálny priestor nestačí, vektory zdvojnásobia veľkosť svojho vnútorného poľa, zatiaľ čo arraylisti zväčšia veľkosť svojho vnútorného poľa o 50%. Ale pri použití arraylistov aj vektorov sa dá vyhnúť vhodnej počiatočnej kapacite zbytočnej zmene veľkosti vnútorného poľa. V situácii, keď je známa rýchlosť rastu údajov, by bolo vhodnejšie použitie vektorov, pretože by bolo možné definovať prírastkovú hodnotu vektorov..