Der Unterschied zwischen ArrayList und Vector
Ähnlichkeiten:
1. ArrayList und Vector erben sowohl dieselbe übergeordnete Klasse als auch implementieren dieselbe Schnittstelle.
2. Die untere Schicht wird durch Arrays implementiert
3. Die anfängliche Standardlänge beträgt 10.
Unterschiede:
1. Synchronisation:
Die meisten öffentlichen Methoden im Vektor fügen synchronisiertes Schlüsselwort hinzu, um die Synchronisation von Methoden zu gewährleisten, dh Vektor-Thread-Safe und ArrayList-Thread ist nicht sicher.
2. Verschiedene Expansion
Unterschiedliche interne Eigenschaften können der Grund für unterschiedliche Skalierungsmethoden sein.
ArrayList verfügt über zwei Eigenschaften, die Array -ElementData, die Daten speichert, und die Größe, die die Anzahl der Datensätze speichert.
Vector verfügt über drei Eigenschaften: das Array -ElementData, das Daten speichert, das Elementcount, das die Anzahl der Datensätze speichert, und die Kapazität des Expansionsfaktors, das die Arraygröße erweitert.
ArrayList -Erweiterungsmethode
//jdk1.8.0_91private void Grow (int mincapacity) {// Überlauf -bewusster Code int oldCapacity = elementData.length; int newCapacity = OldCapacity + (OldCapacity >> 1); if (newcapacity - mincapacity <0) newCapacity = mincapacity; if (newcapacity - max_array_size> 0) newCapacity = Hugcapacity (mincapacity); // Hackigkeit liegt normalerweise nahe an der Größe, daher ist dies ein Gewinn: elementData = arrays.copyof (elementData, Newcapacity); }Es ist ersichtlich, dass bei erfülltem Expansionszustand die verlängerte Arraygröße das 1,5 -fache der ursprünglichen Arraylänge und die größere der übergebenen Parameter beträgt.
Vektorerweiterungsmethode
//jdk1.8.0_91private void Grow (int mincapacity) {// Überlauf -bewusster Code int oldCapacity = elementData.length; int newCapacity = OldCapacity + ((CAPAPYINCREMENT> 0)? CAPAPY INCREMENT: OldCapacity); if (newcapacity - mincapacity <0) newCapacity = mincapacity; if (newcapacity - max_array_size> 0) newCapacity = Hugcapacity (mincapacity); elementData = arrays.copyof (ElementData, NewCapacity); }Es ist ersichtlich, dass, wenn der Expansionsfaktor größer als 0 ist, die Länge des Neuarrays die ursprüngliche Arraylänge + der Expansionsfaktor ist, da ansonsten die Länge des Unter neuen Arrays doppelt so lang wie die Länge des ursprünglichen Arrays. Vergleichen Sie die oben generierte Neuarraylänge mit der übergebenen Parameterlänge, desto größer ist die endgültige neue Länge.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!