Erstens betrachten wir beide Kategorien, die Listenschnittstellen implementieren, und es gibt drei Implementierungsklassen in der List -Schnittstelle, nämlich ArrayList, Vector und LinkedList. Die Liste wird zum Speichern mehrerer Elemente verwendet, kann die Reihenfolge der Elemente beibehalten und die Wiederholung von Elementen ermöglicht.
Die relevanten Unterschiede zwischen den drei spezifischen Implementierungsklassen sind wie folgt:
1. ArrayList ist die am häufigsten verwendete List -Implementierungsklasse, die intern über Arrays implementiert wird und die schnelle Zufallszugriff auf Elemente ermöglicht. Der Nachteil von Arrays ist, dass zwischen jedem Element nicht verteilt werden kann. Wenn die Arraygröße nicht erfüllt ist, muss die Speicherkapazität erhöht werden. Es ist notwendig zu sagen, dass die Daten des bereits Array in den neuen Speicherplatz kopiert werden. Beim Einsetzen oder Löschen von Elementen aus der mittleren Position der ArrayList muss das Array kopiert, bewegt werden und die Kosten sind relativ hoch. Daher eignet es sich für zufällige Lookups und Traversals, nicht für Einfügen und Löschen.
2. Der Vektor wird auch durch Arrays implementiert. Der Unterschied besteht darin, dass er die Threadsynchronisation unterstützt, dh zu einem bestimmten Zeitpunkt kann nur ein Thread einen Vektor schreiben, um Inkonsistenz zu vermeiden, die durch mehrere Threads gleichzeitig verursacht werden, aber es kostet viel, die Synchronisation zu implementieren. Der Zugriff auf sie ist also langsamer als der Zugriff auf ArrayList.
3. LinkedList verwendet eine verknüpfte Listenstruktur, um Daten zu speichern, die für dynamische Einfügung und Löschung von Daten sehr geeignet sind, und die Zufallszugriffs- und Durchlaufgeschwindigkeiten sind relativ langsam. Darüber hinaus enthält es auch Methoden, die nicht in der List -Schnittstelle definiert sind, die speziell zum Betrieb von Tabellenheader- und Schwanzelementen verwendet werden und als Stapel, Warteschlangen und bidirektionale Warteschlangen verwendet werden können.
Als ich den Java-Quellcode betrachtete, stellte ich fest, dass ich das Array neu erstellen und dann die Elemente in das Neue Array kopieren muss, wenn die Größe des Arrays nicht ausreicht. Die Größe des erweiterten Arrays von ArrayList und Vektor ist unterschiedlich.
ArrayList:
public boolean add (e e) {searecapacity (Größe + 1); // Elemente hinzufügen, um festzustellen, ob sie sie aufnehmen können. Wenn Sie nicht können, müssen Sie ein neues Array -ElementData [Größe ++] = E erstellen; return true;} public void searecapacity (int mincapacity) {modcount ++; int oldCapacity = elementData.length; if (mincapacity> OldCapacity) {Object OldData [] = elementData; // Diese Zeile zeigte nicht die Nützlichkeit, ich weiß nicht, was die Entwickler über int NewCapacity = (OldCapacity * 3)/2 + 1 denken; // die Größe des Neuarrays hinzufügen, wenn (Newcapacity <mincapacity) Newcapacity = mincapacity; // Hackigkeit liegt normalerweise nahe an der Größe, daher ist dies ein Gewinn: elementData = arrays.copyof (elementData, Newcapacity); }}Im Vektor:
private void sealecapacityhelper (int mincapacity) {int oldCapacity = elementData.length; if (mincapacity> OldCapacity) {Object [] oldData = elementData; int newcapacity = (CAPAPYINCREMENT> 0)? (OldCapacity + CAPAPY INCREMENT): (OldCapacity * 2); if (newCapacity <mincapacity) {newCapacity = mincapacity; } elementData = arrays.copyof (ElementData, NewCapacity); }}Der Unterschied zwischen ArrayList und Vector lautet wie folgt:
Die ArrayList wird standardmäßig um 50% + 1 erweitert, wenn nicht genügend Speicher vorliegt, und der Vektor wird standardmäßig 1 -fach erweitert.
Vector bietet eine Indexof -Schnittstelle (OBJ, Start), aber ArrayList nicht.
Die Vektoren befinden sich auf der Sicherheitsniveau der Gewinde, aber in den meisten Fällen werden Vektoren nicht verwendet, da die Gewindesicherheit einen größeren Systemaufwand erfordert.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.