1. Wie ArrayList
ist aufgebaut ?
ArrayList
ist die Java-Klasse, die am häufigsten zum Speichern von Elementen verwendet wird. Wie funktioniert es also ArrayList
und warum gefällt es allen so gut?
Der Aufbau ArrayList
ist einfach und genial. Jedes ArrayList
Objekt enthält zwei Felder:
- Ein Array von Elementen
- Eine
size
Variable, die die Anzahl der Elemente in der Liste speichert
Intern ArrayList
enthält ein Objekt ein ganz gewöhnliches Array! Aber das ist nicht alles. Es gibt auch eine Größenvariable , die die Länge der Liste speichert. So funktioniert es:
Anfänglich beträgt die Länge des Arrays innerhalb der Liste 10. Und die size
Variable ist 0.
Wenn Sie der Liste ein Element hinzufügen, wird es in der 0. Zelle des Arrays gespeichert und size
auf 1 erhöht.
Wenn Sie ein weiteres Element hinzufügen, wird es in der 1. Zelle gespeichert und size
erhöht sich erneut um 1 und wird gleich zwei.
Wenn Sie ein weiteres Element hinzufügen, obwohl im Array kein Platz mehr vorhanden ist, geschieht Folgendes in der add()
Methode:
- Es wird ein neues Array erstellt , das eineinhalb Mal so lang ist wie das vorherige
- Alle Elemente des alten Arrays werden in das neue Array kopiert.
- Im
ArrayList
Objekt ersetzt ein Verweis auf das neue Array den Verweis auf das alte . - Das übergebene Element wird in der 10. Zelle des neuen Arrays gespeichert .
- Die Größenvariable erhöht sich um 1 und beträgt nun 11
Etwas Ähnliches passiert beim Hinzufügen (Einfügen) eines Elements in der Mitte der Liste. Die vorhandenen Elemente werden um 1 nach rechts verschoben und das übergebene Element wird in die neu freigegebene Zelle des Arrays geschrieben.
Nun betrachten wir die grundlegendsten Szenarios mit Listen:
2. Hinzufügen eines Elements zu einemArrayList
Werfen wir einen Blick darauf, was in der Liste passiert, wenn ihr Elemente hinzugefügt werden. Unmittelbar nachdem ein ArrayList-Objekt erstellt wurde, haben wir etwa Folgendes im Speicher:
Wir haben ein ArrayList
Objekt, das zwei Felder (zwei Variablen) enthält: einen Container (das data
Array) und die Anzahl der gespeicherten Elemente ( size
). Die data
Variable speichert einen Verweis auf einen Container (Array), der 10 Elemente speichern kann.
Wenn wir uns entscheiden, die Zahl 5 zum Array hinzuzufügen, erhalten wir das folgende Bild:
Das Array speichert nun das Element 5 und size == 1
.
size()
Wenn jetzt jemand die Methode für unser Objekt aufruft ArrayList
, ist der Rückgabewert die Anzahl der in der Liste gespeicherten Elemente: 1. Die Anzahl der Elemente in der Liste ist nicht dasselbe wie die Speicherkapazität des Arrays.
Weder die aktuelle Speicherkapazität noch das Array selbst werden jemals außerhalb des ArrayList
Objekts zugänglich (sichtbar) sein. Dies sind und bleiben die ArrayList
internen Daten von .
Fügen wir der Liste 7 weitere Zahlen hinzu: 10, 20, 30, 40, 50, 60, 70.
Jetzt sieht die Erinnerung so aus:
Wenn Sie die size()
Methode jetzt aufrufen, wird die Zahl 8 zurückgegeben, was der neuen Anzahl von Elementen in der Liste entspricht. Dieser Wert hat nichts mit der Größe des internen Arrays zu tun.
Es gibt eine übermäßige Vereinfachung in diesem Bild.
Die ArrayList
Klasse kann keine primitiven Typen speichern und verwendet daher den Integer
Typ anstelle von int
. Der Container speichert nicht direkt die Werte {5, 10, 20, 30, 40, 50, 60, 70}, sondern Verweise auf Integer
Objekte. Alle leeren Zellen im Container speichern null
.
3. Erhöhen der Länge einer Liste
Werfen wir einen Blick darauf, was in einer Liste passiert, wenn in ihrem internen Array keine leeren Zellen mehr vorhanden sind.
Angenommen, wir haben eine Liste mit 10 Elementen:
Wir beschließen, die Zahl 100 hinzuzufügen. Das passiert in der add()
Methode:
Schritt 1 – Erstellen Sie ein neues Array:
Schritt 2 – Kopieren Sie alle Elemente aus dem alten Array in das neue:
Schritt 3 – Ersetzen Sie das alte Array (ändern Sie den Verweis auf das ArrayList
interne Array des Objekts):
Schritt 4 – Fügen Sie die neue Nummer hinzu, woran wir so hart gearbeitet haben:
GO TO FULL VERSION