ArrayList vs. Vektor
Ein Vektor implementiert Arrays, die zur Laufzeit vergrößert / verkleinert werden können, wenn Elemente hinzugefügt oder daraus entfernt werden. Auf seine Elemente wird mit einem ganzzahligen Index zugegriffen. Zwei Felder - Kapazität und Kapazitätszuwachs - kennzeichnen das Vektorspeichermanagement. Es implementiert vier Schnittstellen:
* Liste
* Direktzugriff
* Klonbar
* Serialisierbare Schnittstellen
ArrayList implementiert ebenso wie Vektoren vier Schnittstellen. Ebenso wie Vektoren kann sich ihre Größe während der Laufzeit ändern. Es hat auch ein Feld namens Capacity, dessen Größe der Größe der ArrayList entspricht.
Sowohl Vektoren als auch ArrayList eignen sich zum Abrufen von Elementen aus beliebigen Positionen sowie zum Einfügen oder Löschen von Elementen am Ende der Containerklasse.
Aus der Sicht der API sind beide Vektoren sowie ArrayList sehr ähnlich. Wo liegt also genau der Unterschied zwischen den beiden? Die folgenden Punkte werden etwas Licht in diese Angelegenheit bringen:
1. Synchronisation: Vektoren werden synchronisiert, ArrayList jedoch nicht. Wenn Sie Elemente aus einer ArrayList hinzufügen oder daraus löschen, wird dies als strukturelle Änderung bezeichnet. Wenn mehrere Threads gleichzeitig auf einen ArrayList mit einem Codeblock zugreifen, der die Liste ändert, muss die Liste extern synchronisiert werden. Kurz gesagt: Vektorinhalte sind Thread-sicher, wohingegen ArrayList's nicht sind. Wenn in der Anforderung keine thread-sichere Sammlung erwähnt wird, sollte ArrayList gewählt werden, da die Synchronisierung die Leistung beeinträchtigt. Nicht synchronisierte ArrayListen sind schnell.
2. Datenwachstum: Sowohl ArrayList- als auch Vektorelemente werden als Arrays gespeichert, aber Vektoren haben eine Standardgröße von 10 und ArrayList hat keine Standardgröße. Wenn einer ArrayList oder einem Vektor ein Element hinzugefügt wird, besteht die Möglichkeit, dass für jede Klasse der Platz ausgeht. In einem solchen Fall verdoppelt ein Vector standardmäßig seine Größe, während die ArrayList-Größe um 50% zunimmt. Sie können einen Inkrementwert für Vektoren festlegen, der für die ArrayList nicht möglich ist.
3. Durchlaufen der Elemente: ArrayList hat hier einen Vorteil, da Sie einfach über einen Index auf die Elemente zugreifen können. Im Falle von Vektoren müssen Sie einen Iterator erstellen, um seine Elemente zu durchlaufen.
Zusammenfassung:
1.Wenn die Containerklasse von einem einzelnen Thread oder einer lokalen Variablen geändert werden soll, sollten Sie eine ArrayList verwenden.
2.Wenn auf die Containerklasse von mehreren Threads zugegriffen wird, verwenden Sie Vektoren, andernfalls müssen Sie die manuelle Synchronisierung durchführen.
3.Wir können die Inkrementgröße mit dem Vektor angeben und mit der ArrayList können wir nicht.
4. Ein Vektor wird synchronisiert und eine ArrayList nicht.
5. Ein Vektor kann die Größe um das Doppelte erhöhen. ArrayList kann es um 50% erhöhen.