ArrayList vs Vector
Vektor implementuje pole, která mohou růst / zmenšit se za běhu, když jsou z něj přidány nebo odebrány některé prvky. K jeho prvkům se přistupuje pomocí celočíselného indexu. Správu vektorového úložiště charakterizují dvě pole - zvýšení kapacity a kapacity. Implementuje čtyři rozhraní:
* Seznam
* Náhodný přístup
* Klonovatelné
* Serializovatelná rozhraní
ArrayList, stejně jako vektory, implementuje také čtyři rozhraní. Stejně jako vektory se jeho velikost může během běhu změnit. Také má pole nazvané kapacita, jehož velikost je stejně velká jako velikost seznamu polí.
Oba vektory a ArrayList jsou dobré pro načítání prvků z libovolné polohy a také pro vkládání nebo mazání prvků z konce třídy kontejneru..
Z pohledu API jsou oba vektory i ArrayList velmi podobné. Takže kde přesně leží rozdíl mezi nimi? Následující body objasní tuto otázku:
1. Synchronizace: Vektory jsou synchronizovány, ale ArrayList není. Pokud přidáte nebo odstraníte prvky z ArrayListu, bude to označováno jako strukturální modifikace. Když se k ArrayListu přistupuje více vláken současně s blokem kódu upravujícím seznam, je třeba externí seznam synchronizovat. Stručně řečeno, obsah vektoru je bezpečný pro vlákno, zatímco ArrayList není. Pokud požadavek nezmínil kolekci bezpečnou pro vlákno, měli bychom si zvolit ArrayList jako výkon synchronizačních zásahů. Nesynchronizované ArrayLists jsou rychlé.
2. Růst dat: ArrayList i vektorové prvky jsou uloženy jako pole, ale vektory mají výchozí velikost 10 a ArrayList nemá výchozí velikost. Když jeden přidá prvek do ArrayListu nebo do vektoru, existuje šance, že některá třída může dojít z místnosti. V takovém případě ve výchozím nastavení zdvojnásobí Vector svou velikost, zatímco velikost ArrayList se zvýší o 50%. Hodnotu přírůstku můžete nastavit v případě vektorů, které nejsou pro ArrayList možné.
3. Procházení elementů: ArrayList má tu výhodu, protože k jeho elementům můžete přistupovat jednoduše pomocí indexu. V případě vektorů musíte vytvořit iterátor, který bude procházet jeho elementy.
Souhrn:
1. Pokud má být třída kontejneru modifikována jedním vláknem nebo nějakou lokální proměnnou, měli byste použít ArrayList.
2.Při přístupu ke třídě kontejnerů pomocí více vláken, použijte vektory, jinak budete muset provést ruční synchronizaci.
3. Můžeme určit velikost přírůstku pomocí vektoru a pomocí pole ArrayList, které nemůžeme.
4. Vektor je synchronizován a ArrayList není.
5. Vektor může zvýšit velikost dvojnásobkem; ArrayList ji může zvýšit o 50%.