Was ist eine ArrayList?
Eine ArrayList in der Computerprogrammierung ist eine Datenstruktur, die sich wie ein Computerarray verhält, aber auch die Fähigkeit implementiert, die Größe des Arrays nach Bedarf dynamisch zu vergrößern. Im Gegensatz zu einem internen Array-Datentyp, dessen Größe während der Programmausführung nicht geändert werden kann, kann die ArrayList-Struktur die Größe des Arrays als Reaktion auf das Hinzufügen oder Löschen von Elementen vergrößern oder verkleinern. Es verfügt über ein sehr günstiges Leistungsprofil, das einen schnellen wahlfreien Zugriff auf die Datenerfassung ermöglicht. Es gibt jedoch zwei Fälle, in denen es langsamer ist als einige andere Datenstrukturen, nämlich das Hinzufügen und Entfernen von Elementen aus der Mitte des Arrays. Die meisten objektorientierten Programmiersprachen haben eine Art Implementierung einer solchen Liste, obwohl sie manchmal als dynamische Arrays bezeichnet werden.
Die Verwendung einer ArrayList bietet einem Programm die Möglichkeit, sofort auf Datenobjekte mit einer Indexnummer zuzugreifen, anstatt eine gesamte Datensequenz durchlaufen zu müssen, um eine Adresse zu finden, die für verknüpfte Listen erforderlich ist. Mit der Möglichkeit, die Größe des Arrays nach Bedarf zu erhöhen, ist dies ein sehr ausgewogener Ansatz, der sowohl Flexibilität als auch Geschwindigkeit berücksichtigt. Wenn Elemente aus einer solchen Liste entfernt werden, verringert sich außerdem die Größe des Arrays, wodurch Speicherplatz frei wird.
Ein Vorteil der Verwendung einer ArrayList gegenüber einigen anderen Datenstrukturen besteht darin, dass ein Wrapper-Objekt die gespeicherten Daten nicht enthalten muss. Im Fall einer verknüpften Liste oder einer Hash-Tabelle wird normalerweise ein separates Objekt benötigt, um die Technik beizubehalten, die zum Halten und Bearbeiten der Auflistung verwendet wird. Bei einer ArrayList ist die einzige Information, die über die Datenobjekte benötigt wird, die Adresse des Objekts im Speicher. Dies bedeutet, dass beim Arbeiten mit diesem Listentyp weniger Overhead-Speicher benötigt wird.
Ein potenzielles Problem bei der Verwendung einer ArrayList kann durch das Implementierungs- und Speicherverwaltungssystem verursacht werden. Die meisten Arrays werden als aufeinanderfolgende Speicherorte zugewiesen. Um eine ArrayList einer bestimmten Größe zu verwenden, muss mindestens so viel Speicher in einer ununterbrochenen Folge von Blöcken verfügbar sein. Das dynamische Array kann seine Größe mehrmals ändern, sodass eine Speicherfragmentierung auftreten und zu einem Speicherzuordnungsfehler führen kann, wodurch die Programmausführung angehalten wird.
Die Leistung einer ArrayList ähnelt der eines Standard-Arrays, obwohl die Zugriffszeiten etwas langsamer sind, da das Array in ein Objekt eingekapselt ist. Ein Fall, in dem ein dynamisches Array je nach Implementierung dramatisch langsamer werden kann, ist, wenn die Größe des Arrays geändert werden muss. Dies kann das Kopieren des aktuellen Arrays in ein neues Array umfassen, das der neuen gewünschten Größe zugewiesen wurde, was zu einer vorübergehenden Verschlechterung der Leistung führt. Dasselbe Problem tritt auf, wenn ein Element in der Mitte der Liste hinzugefügt oder daraus entfernt wird, sodass alle folgenden Elemente an eine neue Position verschoben werden müssen.