Arraylist vs Vector
Seznam polí lze považovat za dynamické pole, jehož velikost může narůstat. Z tohoto důvodu programátor nemusí znát velikost seznamu polí, když jej definuje. Na vektor lze také pohlížet jako na pole, jehož velikost může narůstat. Vektory lze snadno alokovat a lze je použít, když požadovaná velikost úložiště není známa až do běhu.
Co je to Arraylist?
Seznam polí lze považovat za dynamické pole, jehož velikost může narůstat. Proto jsou seznamy polí ideální pro použití v situaci, kdy neznáte velikost prvků požadovaných v době deklarace. V Javě mohou seznamy polí obsahovat pouze objekty, nemohou přímo obsahovat primitivní typy (přimitivní typy můžete umístit do objektu nebo použít obalové třídy primitivních typů). Obecně jsou seznamy polí poskytovány s metodami pro 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í Java Collections Framework.
Co je to vektor?
Vektor je také pole, jehož velikost může narůstat. Vektory lze snadno alokovat 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 synchronizované, proto je lze bezpečně používat ve vícevláknových prostředích. Vektory jsou vybaveny metodami pro přidávání objektů, odstraňování objektů a vyhledávání objektů. Podobně jako u arraylistu 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?
Přestože jak seznamy polí, tak vektory jsou velmi podobné dynamickým polím, jejichž velikost může narůstat, mají některé důležité rozdíly. Hlavní rozdíl mezi seznamy polí a vektory je v tom, že vektory jsou synchronizované, zatímco seznamy polí jsou nesynchronizované. Proto použití seznamů polí ve vícevláknových prostředích nebude vhodné, zatímco vektory lze bezpečně používat ve vícevláknových prostředích (protože jsou bezpečné pro vlákna). Ale synchronizace ve vektorech by způsobila snížení výkonu. Proto by nebylo dobré používat vektory v prostředí s jedním vláknem. Interně jak seznamy polí, tak vektory používají pole k uložení objektů. Když aktuální prostor nestačí, vektory zdvojnásobí velikost jeho vnitřního pole, zatímco seznamy polí zvětší velikost jeho vnitřního pole o 50 %. Ale když použijete seznamy polí i vektory, poskytnutím vhodné počáteční kapacity se lze vyhnout zbytečné změně velikosti vnitřního pole. V situaci, kdy je známa rychlost růstu dat, by bylo vhodnější použít vektory, protože by mohla být definována přírůstková hodnota vektorů.