Arraylist vs Vector
Arraylist lze považovat za dynamické pole, které se může zvětšovat. Z tohoto důvodu nemusí programátor znát velikost arraylistu, když ji definuje. Vektor lze také chápat jako pole, které se může zvětšovat. Vektory lze snadno alokovat a lze je použít, když není požadovaná velikost úložiště známa až za běhu.
Co je to Arraylist?
Arraylist lze považovat za dynamické pole, které se může zvětšovat. Proto jsou arraylisté ideální pro použití v situacích, kdy neznáte velikost prvků požadovaných v době deklarace. V Javě mohou arraylisté držet pouze objekty, nemohou držet primitivní typy přímo (primitivní typy můžete vložit do objektu nebo použít třídy obalů primitivních typů). Obecně jsou arraylisté opatřeni 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ě mohou být arraylisté procházeni pomocí foreach smyček, iterátorů nebo jednoduše pomocí indexů. V Javě byli arraylisté představeni od verze 1.2 a jsou součástí Java Collection Framework.
Co je to Vektor?
Vektor je také pole, které se může zvětšovat. Vektory lze snadno alokovat a lze je použít, pokud není požadovaná velikost úložiště známa až za běhu. Vektory také mohou pojmout pouze objekty a nemohou pojmout primitivní typy. Vektory jsou synchronizovány, a proto je lze bezpečně používat ve vícevláknových prostředích. Vektory jsou vybaveny metodami přidání objektů, odstranění objektů a hledání objektů. Podobně jako arraylist v java mohou být vektory procházeny pomocí foreach smyček, iterátorů nebo jednoduše pomocí indexů. Pokud jde o Javu, byly zahrnuty vektory od první verze Java.
Jaký je rozdíl mezi Arraylistem a Vectorem??
Přestože jak arraylisté, tak vektory jsou velmi podobné dynamickým polím, které se mohou zvětšovat, mají některé důležité rozdíly. Hlavním rozdílem mezi arraylisty a vektory je to, že vektory jsou synchronizovány, zatímco arraylisty jsou nesynchronizované. Proto použití arraylistů ve vícevláknových prostředích nebude vhodné, zatímco vektory mohou být bezpečně použity ve vícevláknových prostředích (protože jsou bezpečná pro vlákna). Synchronizace ve vektorech by však způsobila snížení výkonu. Proto by nebylo dobré používat vektory v prostředí s jedním vláknem. Interně, jak arraylists tak vektory používají pole držet objekty. Když aktuální prostor nestačí, vektory zdvojnásobí velikost svého vnitřního pole, zatímco arraylisté zvětší velikost svého vnitřního pole o 50%. Ale při použití arraylistů a vektorů, poskytnutím vhodné počáteční kapacity, lze 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žít vektory, protože by mohla být definována přírůstková hodnota vektorů.