1. Wie ArrayListist aufgebaut ?

ArrayListist die Java-Klasse, die am häufigsten zum Speichern von Elementen verwendet wird. Wie funktioniert es also ArrayListund warum gefällt es allen so gut?

Der Aufbau ArrayListist einfach und genial. Jedes ArrayListObjekt enthält zwei Felder:

  • Ein Array von Elementen
  • Eine sizeVariable, die die Anzahl der Elemente in der Liste speichert

Intern ArrayListenthä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 sizeVariable ist 0.

Wenn Sie der Liste ein Element hinzufügen, wird es in der 0. Zelle des Arrays gespeichert und sizeauf 1 erhöht.

Wenn Sie ein weiteres Element hinzufügen, wird es in der 1. Zelle gespeichert und sizeerhö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:

  1. Es wird ein neues Array erstellt , das eineinhalb Mal so lang ist wie das vorherige
  2. Alle Elemente des alten Arrays werden in das neue Array kopiert.
  3. Im ArrayListObjekt ersetzt ein Verweis auf das neue Array den Verweis auf das alte .
  4. Das übergebene Element wird in der 10. Zelle des neuen Arrays gespeichert .
  5. 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:

Hinzufügen eines Elements zu einer ArrayList

Wir haben ein ArrayListObjekt, das zwei Felder (zwei Variablen) enthält: einen Container (das dataArray) und die Anzahl der gespeicherten Elemente ( size). Die dataVariable 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:

Hinzufügen eines Elements zu einer ArrayList 2

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 ArrayListObjekts zugänglich (sichtbar) sein. Dies sind und bleiben die ArrayListinternen Daten von .

Fügen wir der Liste 7 weitere Zahlen hinzu: 10, 20, 30, 40, 50, 60, 70.

Jetzt sieht die Erinnerung so aus:

Hinzufügen eines Elements zu einer ArrayList

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.

Wichtig:

Es gibt eine übermäßige Vereinfachung in diesem Bild.

Die ArrayListKlasse kann keine primitiven Typen speichern und verwendet daher den IntegerTyp anstelle von int. Der Container speichert nicht direkt die Werte {5, 10, 20, 30, 40, 50, 60, 70}, sondern Verweise auf IntegerObjekte. 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:

Erhöhen der Länge einer Liste

Wir beschließen, die Zahl 100 hinzuzufügen. Das passiert in der add()Methode:

Schritt 1 – Erstellen Sie ein neues Array:

Länge einer Liste erhöhen 2

Schritt 2 – Kopieren Sie alle Elemente aus dem alten Array in das neue:

Länge einer Liste erhöhen 2

Schritt 3 – Ersetzen Sie das alte Array (ändern Sie den Verweis auf das ArrayListinterne Array des Objekts):

Länge einer Liste erhöhen 3

Schritt 4 – Fügen Sie die neue Nummer hinzu, woran wir so hart gearbeitet haben:

Länge einer Liste erhöhen 4