Die Speicherkapazität beider Listen ist erweiterbar oder kontraktil, Java-Designer haben es dynamisch gestaltet, um eine optimale Speichernutzung zu gewährleisten. Jeder hat jedoch seine eigene Methode. ArrayList wird um die Hälfte vergrößert, während Vector seine Standardgröße verdoppelt. Die Kapazität von ArrayList kann durch Aufrufen der Methode
ensureCapacity().
4) fail-fastLassen Sie uns zunächst verstehen, was ein Fail-Fast ist: Wenn die Sammlung (ArrayList, Vector usw.) mit Ausnahme der Iterator-Add- und Remove-Operationen geändert wird, löst der Iterator nach dem Erstellen des Iterators eine Ausnahme aus
ConcurrentModificationException. Das Ändern der Struktur hängt mit dem Hinzufügen oder Entfernen von Elementen aus der Sammlung zusammen.
Vector gibt ein Enumeration-Objekt zurück, indem
elements() das ist kein Fehler. Auf der anderen Seite sind Iterator und ListIterator, die von ArrayList zurückgegeben werden, ausfallschnell.
5) Wer gehört wirklich zum Collection-Framework?Vector ist eine dieser Klassen, die mit JDK 1.0 eingeführt wurden und ursprünglich nicht Teil des Collection-Frameworks waren, aber in der neuesten Version berücksichtigt wurden, da sie die List-Schnittstelle implementiert, es wurde Teil der collection.
ArrayList Framework wurde nach Vector mit der Veröffentlichung von JDK 1.2 eingeführt. ArrayList war fortschrittlicher als Vector, hatte aber auch alle Spezifikationen von Vector. Also begannen die Leute, ArrayList anstelle von Vector zu verwenden, und in diesem Fall wurde Vector zu einer Legacy-Klasse.
Wann sollten Vector und ArrayList verwendet werden?
Es hängt von Ihren Bedürfnissen ab, wenn Ihr Code die Synchronisierung der Prozesse (Threads) durchführt, wäre Vector die beste Wahl, da es sicherstellt, dass jeweils nur ein Thread auf die Sammlung zugreift.
Die Synchronisationsvorgänge verbrauchen im Vergleich zu nicht synchronisierten Vorgängen viel Zeit, wenn Ihre Anwendung also schneller ausgeführt werden muss und keine Synchronisierung benötigt, ist ArrayList die richtige Wahl, was die Leistung angeht.
Diese Tabelle fasst die 5 Unterschiede zusammen, die wir gesehen haben:
ArrayList | Vector |
<> 1) ArrayList ist nicht synchronisiert. | Vector is synchronized | 2) ArrayList erhöht 50% seiner aktuellen Größe, wenn die Anzahl der Elemente seine Kapazität überschreitet | Vector invrementes 100%, d.h. das Doppelte seiner ursprünglichen Größe, wenn die Anzahl der Elemente seine Kapazität überschreitet |
<> 3) ArrayList wurde in JDK 1.2. | Vector wurde in JDK 1.0 eingeführt | 4) ArrayList ist schnell, weil es nicht synchronisiert ist | Vector ist langsam, weil es synchronisiert ist. In einem Wettbewerbsumfeld blockiert es den Zugriff anderer Prozesse, bis der erste Thread den Zugriff zulässt |
5) ArrayList verwendet Iterator, um durch Elemente zu iterieren | Vector verwendet die Enumeration-Schnittstelle, um durch Elemente zu iterieren, aber: Es kann auch Iterator verwenden |