Arraylist vs Vector
Arraylist lze chápat jako dynamické pole, které může růst. Z tohoto důvodu programátor nepotřebuje znát velikost pole, když jej definuje. Na vektor lze také pohlížet jako na pole, které může růst. Vektory lze snadno přidělit a lze je použít, když požadovaná velikost úložiště není známa až za běhu.
Co je to Arraylist?
Arraylist lze chápat jako dynamické pole, které může růst. Proto jsou seznamy polí ideální pro použití v situacích, kdy neznáte velikost prvků požadovaných v době deklarace. V Javě mohou seznamy polí obsahovat pouze objekty, nemohou přímo držet primitivní typy (primitivní typy můžete vložit do objektu nebo použít obálkové třídy primitivních typů). Obecně jsou seznamy polí poskytovány s metodami provádění vkládání, mazání a vyhledávání. Časová složitost přístupu k prvku je o (1), zatímco vkládání a mazání má časovou složitost o (n). V Javě lze seznamy polí procházet pomocí smyček foreach, iterátorů nebo jednoduše pomocí indexů. V Javě byly seznamy polí zavedeny od verze 1.2 a jsou součástí rámce Java Collections Framework.
Co je to Vector?
Vector je také pole, které může růst. Vektory lze snadno přidělit a lze je použít, když požadovaná velikost úložiště není známa až do běhu. Vektory také mohou obsahovat pouze objekty a nemohou obsahovat primitivní typy. Vektory jsou synchronizovány, a proto je lze bezpečně použít v prostředí s více vlákny. Vektory jsou vybaveny metodami pro přidávání objektů, mazání objektů a hledání objektů. Podobně jako v Arraylist v Javě lze vektory procházet pomocí smyček foreach, iterátorů nebo jednoduše pomocí indexů. Pokud jde o Javu, vektory byly zahrnuty od první verze Javy.
Jaký je rozdíl mezi Arraylist a Vector?
I když jsou oba seznamy polí a vektory velmi podobné dynamickým polím, jejichž velikost může růst, mají některé důležité rozdíly. Hlavní rozdíl mezi seznamy polí a vektory spočívá v tom, že vektory jsou synchronizovány, zatímco seznamy polí jsou nesynchronizované. Proto použití seznamů polí v prostředí s více vlákny nebude vhodné, zatímco vektory lze bezpečně používat v prostředích s více vlákny (protože jsou bezpečné pro vlákna). Ale synchronizace ve vektorech by způsobila snížení výkonu. Proto by nebyl dobrý nápad používat vektory v prostředí s jedním vláknem. Interně oba seznamy a vektory používají pole k držení objektů. Pokud aktuální prostor nestačí, vektory zdvojnásobí velikost jeho interního pole, zatímco seznamy polí zvětší velikost jeho interního pole o 50%. Ale při použití jak arraylistů, tak vektorů lze vhodnou počáteční kapacitou zabránit zbytečné změně velikosti vnitřního pole. V situaci, kdy je známa rychlost růstu dat, by bylo vhodnější použití vektorů, protože by bylo možné definovat přírůstkovou hodnotu vektorů.