Was sind die Unterschiede zwischen ArrayList und Vector?
Was sind die Unterschiede zwischen den beiden Datenstrukturen ArrayList und Vektor, und wo sollten Sie jeden von Ihnen?
Kommentar zu dem Problem - Öffnen
Ich bin nicht zu sehen, das genau hier zu duplizieren.
Naja, man kann auch Vektoren in java -
Vector v = new Vektor(3, 2);
Verwenden Sie nie
Vector
, ArrayList
oder LinkedList
oder ArrayDeque
InformationsquelleAutor der Frage KushalP | 2010-06-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Unterschiede
nicht.
ArrayLists verwenden, wenn es keine spezifischen Anforderungen für den Einsatz von Vektoren.
Synchronisation
Wenn mehrere threads den Zugriff auf ein ArrayList-gleichzeitig dann müssen wir extern synchronisieren Sie die code-block, der das ändert die Liste entweder strukturell oder einfach ändert ein element. Bauliche Veränderung bedeutet, hinzufügen oder löschen von element(en) aus der Liste. Der Wert eines vorhandenen Elements ist nicht eine strukturelle Veränderung.
Collections.synchronizedList
ist in der Regel verwendet zum Zeitpunkt der Erstellung der Liste zu vermeiden, irgendwelche zufälligen unsynchronisierten Zugriff auf die Liste.Referenz
Daten Wachstum
Intern, sowohl die ArrayList und Vector halten Sie auf Ihre Inhalte mit einem Array. Wenn ein element eingefügt wurde, in eine ArrayList oder einen Vector, der das Objekt erweitern müssen, seine interne array-wenn es läuft aus dem Zimmer. Ein Vektor standardmäßig eine Verdoppelung der Größe des Arrays, während die ArrayList erhöht seine array-Größe um 50 Prozent.
Referenz
InformationsquelleAutor der Antwort Sev
Wie die Dokumentation sagt, ein
Vector
und einArrayList
sind fast gleichwertig. Der Unterschied ist, dass der Zugang zu einemVector
synchronisiert ist, in der Erwägung, dass der Zugang zu einerArrayList
ist nicht. Was dies bedeutet ist, dass nur ein thread kann die Methoden aufrufen, die auf einemVector
zu einer Zeit, und es gibt eine leichte Aufwand für den Erwerb der Sperre; wenn Sie eineArrayList
ist dies nicht der Fall ist. In der Regel werden Sie wollen, verwenden Sie einArrayList
; im Singlethread-Fall ist es eine bessere Wahl, und in der multi-threaded-Fall, erhalten Sie eine bessere Kontrolle über die sperren. Möchten gleichzeitigen liest? Fein. Möchten, führen Sie eine Synchronisierung für eine charge von zehn schreibt? Auch in Ordnung. Es erfordert ein wenig mehr Sorgfalt auf Ihrer Seite, aber es ist wahrscheinlich das, was Sie wollen. Beachten Sie auch, dass wenn Sie eine ArrayList, die Sie verwenden können, dieSammlungen.synchronizedList
Funktion zum erstellen einer synchronisierten Liste, so bekommen Sie den Gegenwert von einemVector
.InformationsquelleAutor der Antwort Antal Spector-Zabusky
Vector
ist ein gebrochen Klasse, die nicht threadsicher sind, obwohl Sie als "synchronisiert" und ist nur für Studenten und andere unerfahrene Programmierer.ArrayList
ist die go-to-Liste Durchführung von professionellen und erfahrenen Programmierern.Profis wollen ein threadsicher Liste-Implementierung verwenden
CopyOnWriteArrayList
.InformationsquelleAutor der Antwort Bohemian
ArrayList
ist neuer und 20-30% schneller.Wenn Sie etwas nicht brauchen explitly deutlich in
Vector
verwendenArrayList
InformationsquelleAutor der Antwort Oli
Es gibt 2 wesentliche Differenzierung ist zwischen Vector und ArrayList.
Vektor ist standardmäßig synchronisiert, und die ArrayList nicht.
Hinweis : Sie können ArrayList auch synchronisiert durch die übergabe der arraylist-Objekt-Sammlungen.synchronizedList () - Methode.
Synchronisiert bedeutet : es kann verwendet werden, mit mehreren threads ohne jede Nebenwirkung.
ArrayLists wachsen, um 50% der vorherigen Größe, wenn Platz nicht ausreichend für ein neues element, wo Sie als Vektor wird wachsen, indem Sie 100% der vorherigen Größe, wenn es ist kein Platz für neu ankommende element.
Andere als diese, gibt es einige praktische Unterschiede zwischen Ihnen im Hinblick auf die Programmier-Aufwand:
An die Stelle dieses in der ArrayList haben wir bekommen(int index), die sehr
leicht zu merken und zu verwenden.
Sie haben weitere Programmierer benutzerfreundlich und einfach zu bedienen-Funktion Namen in der ArrayList.
, Wann welcher zu benutzen?
Hinweis : obwohl arraylist wächst um 100%, Sie können dies vermeiden, indem ensurecapacity () - Methode, um sicherzustellen, dass Sie werden die Bereitstellung ausreichender Speicher in der Anfangsphase selbst.
Hoffe, es hilft.
InformationsquelleAutor der Antwort user1923551
Grundsätzlich beide ArrayList und Vector beide die interne Objekt-Array.
ArrayList: Die ArrayList-Klasse extends AbstractList und implementiert das List-interface und RandomAccess (marker-interface). ArrayList unterstützt dynamische arrays, die bei Bedarf erweitert werden kann. Es gibt uns eine erste iteration über die Elemente.
ArrayList verwendet intern Object-Arrays; Sie werden erstellt, mit einer Standard-Anfangsgröße von 10. Wenn diese Größe überschritten wird, wird die Sammlung automatisch erhöht, um die Hälfte der Standard-Größe, die im 15.
Vektor: Vektor ist ähnlich wie ArrayList, aber die Unterschiede sind, es synchronisiert ist und seine Standard-anfängliche Größe ist 10 und wenn die Größe überschreitet die Größe des abbild zu doppelte der ursprünglichen Größe, die bedeutet, dass die neue Größe 20. Vector ist die einzige Klasse, die andere als ArrayList zu implementieren RandomAccess. Vector ist mit vier Konstruktoren aus, dass man die zwei Parameter nimmt Vector(int initialCapacity, int capacityIncrement) capacityIncrement ist der Betrag, um den sich die Kapazität erhöht wird, wenn die Vektor-overflows, so dass Sie mehr Kontrolle über die Auslastung.
Einige andere Unterschiede sind:
InformationsquelleAutor der Antwort subhashis
ArrayList Vs Vektor:
1) Synchronisation: ArrayList ist nicht synchronisiert, was bedeutet, dass mehrere threads können auf die ArrayList in der gleichen Zeit. Für z.B. wenn ein thread führt eine add-operation auf der ArrayList, kann es einen anderen thread ausführen entfernen operation auf ArrayList zur gleichen Zeit in einer multithreaded-Umgebung
während Vector ist synchronisiert. Dies bedeutet, wenn ein thread arbeitet auf Vektor -, kein anderer thread kann in den Griff bekommen. Im Gegensatz zu ArrayList, nur ein thread kann das ausführen einer operation auf Vektor zu einer Zeit.
2) Größe: Beide ArrayList und Vector kann wachsen und schrumpfen dynamisch zu halten, die optimale Nutzung von Speicher -, aber die Art, wie Sie in der Größe verändert, ist anders. ArrayList wachsen um die Hälfte seiner Größe, wenn die Größe geändert werden, während Vektor-verdoppelt die Größe der sich standardmäßig, wenn Sie wächst.
3) Leistung: ArrayList bietet eine bessere Leistung, da es nicht synchronisiert. Vektor-Operationen gibt schlechte Leistung, wie Sie sind thread-sicher, der thread arbeitet auf Vektor erhält eine Sperre auf es, welches macht anderen thread warten, bis der lock freigegeben wird.
4) fail-fast: lassen Sie mich Zuerst erklären, was ist fail-fast: Wenn die collection (ArrayList, vector usw) bekommt strukturell geändert durch irgendwelche Mittel, außer dem hinzufügen oder entfernen von Methoden von iterator, die nach der Erstellung der iterator ist dann der iterator wird ConcurrentModificationException werfen. Strukturelle änderung bezieht sich auf das hinzufügen oder löschen von Elementen aus der Sammlung.
Gemäß der Vektor-javadoc der Enumeration zurückgegeben durch einen Vektor ist nicht fail-fast. Auf der anderen Seite der iterator und listIterator ArrayList zurückgegeben werden scheitern-und zwar schnell.
5) Wer gehört zum collection framework wirklich? Der Vektor war nicht Teil des collection framework, es wurde in Sammlungen später. Es kann betrachtet werden als Legacy-code. Es gibt nichts über Vektor der Sammlung der Liste nicht. Deshalb Vektor sollte vermieden werden. Wenn es notwendig ist, der thread-sicheren Betrieb zu gewährleisten, ArrayList synchronisiert werden, wie im nächsten Abschnitt besprochen von diesem post, oder verwenden Sie die CopyOnWriteArrayList ist eine thread-safe-Variante von ArrayList.
Gibt es einige ähnlichkeiten zwischen diesen Klassen, die wie folgt lauten:
Beiden Vector und ArrayList verwenden
growable array data structure
.Der iterator und listIterator zurückgegeben, indem diese Klassen (Vector und ArrayList)
fail-fast
.Sie sind beide
ordered collection
Klassen, wie Sie pflegen Sie die Elemente einfügen, um.Vector & ArrayList beide
allows duplicate and null values
.Sie beide wachsen und schrumpfen automatisch, wenn überlauf und Löschung passiert.
InformationsquelleAutor der Antwort Nishat Lakhani
ArrayList
undVector
beide implementiert List-Schnittstelle und pflegt die insertion um.Aber es gibt viele Unterschiede zwischenArrayList
undVector
Klassen...ArrayList -
ArrayList
ist nicht synchronisiert.ArrayList
Schritten von 50% des aktuellen array-Größe ist die Anzahl der Elemente überschreitet, aus seiner Kapazität.ArrayList
ist kein Vermächtnis Klasse, es ist eingeführt im JDK 1.2.ArrayList
ist schnell, weil es nicht synchronisiert werden.ArrayList
verwendet Iterator-Schnittstelle zum Durchlaufen der Elemente.Vektor -
Vector
synchronisiert werden.Vector
Schritten von 100% bedeutet, verdoppelt sich die array-Größe, wenn die Summe der Anzahl der Elemente überschreitet, als seine Kapazität.Vector
ist ein Vermächtnis Klasse.Vector
ist langsam, weil es synchronisiert wird, d.h. in einer multithreading-Umgebung, wird es halten die anderen threads ausführbar oder nicht ausführbar Zustand, bis der aktuelle thread die Sperre des Objekts.Vector
verwendet Enumeration-Schnittstelle zum Durchlaufen der Elemente. Aber Sie kann mit Iterator auch.Siehe Auch : https://www.javatpoint.com/difference-between-arraylist-and-vector
InformationsquelleAutor der Antwort roottraveller
Vektor ist standardmäßig synchronisiert, und die ArrayList nicht. Hinweis : Sie
machen können ArrayList auch synchronisiert durch die übergabe der arraylist-Objekt
Sammlungen.synchronizedList () - Methode. Synchronisiert bedeutet : es kann
verwendet werden, mit mehreren threads ohne jede Nebenwirkung.
ArrayLists wachsen, um 50% der vorherigen Größe, wenn Platz nicht
ausreichend für neues element, wo Sie als Vektor wird wachsen 100%
Vorherige Größe, wenn es ist kein Platz für neu ankommende element.
InformationsquelleAutor der Antwort HeadAndTail