ArrayList a Vector

Anonim

ArrayList vs Vector

Vektor implementuje pole, která mohou růst / zmenšovat při běhu, když jsou přidány nebo odebrány některé prvky. Jeho prvky jsou přístupné pomocí indexu celé číslo. Dvě pole - kapacitní a kapacitní přírůstek charakterizují správu vektorového úložiště. Implementuje čtyři rozhraní: * Seznam * Náhodný přístup * Cloneable * Serializovatelná rozhraní

ArrayList, stejně jako vektory, také implementuje čtyři rozhraní. Znovu, stejně jako vektory, se jeho velikost může během běhu změnit. Také má pole nazvané kapacita, jejíž velikost je tak velká jako velikost pole ArrayList.

Obě vektory a ArrayList jsou vhodné pro načítání prvků z jakékoliv pozice a také pro vkládání nebo mazání prvků z konce třídy kontejnerů. Z perspektivy API jsou oba vektory stejně jako ArrayList velmi podobné. Kde přesně leží rozdíl mezi oběma? Následující body k této otázce osvětlí:

1. Synchronizace: Vektory jsou synchronizovány, ale ArrayList není. Pokud přidáte nebo odstraníte prvky z pole ArrayList, označuje se to jako strukturální úprava. Když více závitů přistupuje k ArrayList souběžně s blokem kódu, který upravuje seznam, musí být externě synchronizován seznam. Stručně řečeno, obsah vektorů je bezpečné pro vlákno, zatímco ArrayList není. Pokud požadavek nezmiňuje kolekci bezpečné pro vlákno, měli byste zvolit funkci ArrayList jako synchronizaci. Nesynchronizované ArrayLists jsou rychlé.

2. Růst dat: Obě pole ArrayList a vektorové prvky jsou uloženy jako matice, ale vektory mají výchozí velikost 10 a ArrayList nemá výchozí velikost. Když jeden přidá prvek do ArrayListu nebo vektoru, existuje šance, že každá třída může vyčerpat pokoj. V takovém případě se ve výchozím nastavení Vector zdvojnásobí velikost, zatímco velikost ArrayList se zvýší o 50%. V případě vektorů můžete nastavit hodnotu přírůstku, která pro ArrayList není možná.

3. Procházení prvků: ArrayList má tu výhodu, protože můžete přistupovat k jeho prvkům jednoduše pomocí indexu. V případě vektorů je třeba vytvořit iterátor, který prochází jeho prvky.

Souhrn:

1.Pokud je třída kontejneru modifikována jedním vláknem nebo nějakou místní proměnnou, měli byste použít ArrayList. 2.Pokud je třída kontejneru přístupná vícenásobnými vlákny, použijte vektory, jinak budete muset provést manuální synchronizaci. 3.Můžeme určit velikost přírůstku s vektorem a pomocí ArrayList nemůžeme. 4. Vektor je synchronizován a ArrayList není. 5.A vektor může zvýšit velikost dvojitým; ArrayList může zvýšit o 50%.