Die Kapazität einer ArrayList im Vergleich zur Größe eines Arrays in Java

1. Übersicht

Mit Java können wir Arrays fester Größe erstellen oder Sammlungsklassen verwenden, um einen ähnlichen Job auszuführen.

In diesem Tutorial werden wir den Unterschied zwischen der Kapazität einer ArrayList und der Größe eines Arrays untersuchen.

Wir werden uns auch Beispiele ansehen, wann wir ArrayList mit einer Kapazität initialisieren sollten, sowie die Vor- und Nachteile in Bezug auf die Speichernutzung.

2. Beispiel

Um die Unterschiede zu verstehen, versuchen wir zunächst beide Optionen.

2.1. Größe eines Arrays

In Java muss beim Erstellen einer neuen Instanz die Größe eines Arrays angegeben werden:

Integer[] array = new Integer[100]; System.out.println("Size of an array:" + array.length);

Hier haben wir einen I nteger Array der Größe 100, die in dem unten Ausgang geführt

Größe eines Arrays: 100

2.2. Kapazität einer ArrayList

Erstellen wir nun eine ArrayList mit einer Anfangskapazität von 100:

List list = new ArrayList(100); System.out.println("Size of the list is :" + list.size());
Größe der Liste ist: 0

Da noch keine Elemente hinzugefügt wurden, ist die Größe Null.

Fügen wir nun der Liste ein Element hinzu und überprüfen Sie die Größe:

list.add(10); System.out.println("Size of the list is :" + list.size());
Größe der Liste ist: 1

3. Größe in Arrays vs. ArrayList

Im Folgenden sind einige wesentliche Unterschiede zwischen der Größe eines Arrays und der Kapazität einer ArrayList aufgeführt.

3.1. Änderung der Größe

Arrays haben eine feste Größe. Sobald wir das Array mit einem int- Wert als Größe initialisiert haben , kann es sich nicht mehr ändern. Die Größe und Kapazität sind auch gleich.

Größe und Kapazität von ArrayList sind nicht festgelegt. Die logische Größe der Liste ändert sich basierend auf dem Einfügen und Entfernen von Elementen darin. Dies wird getrennt von der physischen Speichergröße verwaltet. Auch wenn der Schwellenwert für die ArrayList- Kapazität erreicht ist, erhöht sich die Kapazität, um Platz für mehr Elemente zu schaffen.

3.2. Speicherzuweisung

Der Array-Speicher wird bei der Erstellung zugewiesen. Wenn wir ein Array initialisieren, ordnet es den Speicher entsprechend der Größe und dem Typ eines Arrays zu. Es initialisiert alle Elemente mit einem Nullwert für Referenztypen und dem Standardwert für primitive Typen.

ArrayList ändert die Speicherzuordnung, wenn sie wächst. Wenn wir die Kapazität beim Initialisieren der ArrayList angeben, wird genügend Speicher zugewiesen, um Objekte bis zu dieser Kapazität zu speichern. Die logische Größe bleibt 0. Wenn die Kapazität erweitert werden muss, wird ein neues, größeres Array erstellt und die Werte werden darauf kopiert.

Wir sollten beachten, dass es ein spezielles Singleton-Array der Größe 0 für leere ArrayList- Objekte gibt, wodurch die Erstellung sehr billig ist. Es ist auch erwähnenswert, dass ArrayList intern ein Array von Objektreferenzen verwendet.

4. Wann wird ArrayList mit Kapazität initialisiert ?

Es ist zu erwarten, dass die Kapazität einer ArrayList initialisiert wird, wenn wir die erforderliche Größe kennen, bevor wir sie erstellen. Dies ist jedoch normalerweise nicht erforderlich. Es gibt jedoch einige Gründe, warum dies die beste Option sein kann.

4.1. Erstellen einer großen ArrayList

Es ist gut, eine Liste mit einer anfänglichen Kapazität zu initialisieren, wenn wir wissen, dass sie groß wird. Dies verhindert einige kostspielige Wachstumsvorgänge, wenn wir Elemente hinzufügen.

Wenn die Liste sehr groß ist, können die automatischen Vergrößerungsvorgänge in ähnlicher Weise mehr Speicher zuweisen, als für die genaue maximale Größe erforderlich ist. Dies liegt daran, dass die Menge, die jedes Mal wachsen soll, als Anteil der bisherigen Größe berechnet wird. Bei großen Listen kann dies zu einer Verschwendung von Speicher führen.

4.2. Erstellen kleiner multipler ArrayList s

Wenn wir viele kleine Sammlungen haben, kann die automatische Kapazität einer ArrayList einen großen Prozentsatz an verschwendetem Speicher bereitstellen. Angenommen , ArrayList bevorzugt eine Größe von 10 mit einer geringeren Anzahl von Elementen, aber wir speichern nur 2 oder 3. Das bedeutet 70% verschwendeten Speicher, was wichtig sein kann, wenn wir eine große Anzahl dieser Listen haben.

Durch Einstellen der Kapazität im Voraus kann diese Situation vermieden werden.

5. Abfall vermeiden

Wir sollten beachten, dass ArrayList eine gute Lösung für einen Container mit flexibler Größe von Objekten ist, der den Direktzugriff unterstützen soll. Es verbraucht etwas mehr Speicher als ein Array, bietet jedoch eine umfangreichere Auswahl an Operationen.

In einigen Anwendungsfällen, insbesondere bei großen Sammlungen primitiver Werte, ist das Standardarray möglicherweise schneller und benötigt weniger Speicher.

In ähnlicher Weise kann LinkedList leistungsfähiger sein , um eine variable Anzahl von Elementen zu speichern, auf die nicht über den Index zugegriffen werden muss. Es ist kein Overhead für die Speicherverwaltung erforderlich.

6. Zusammenfassung

In diesem kurzen Artikel haben wir den Unterschied zwischen der Kapazität der ArrayList und der Größe eines Arrays gesehen. Wir haben uns auch angesehen, wann wir die ArrayList mit Kapazität und ihren Vorteilen in Bezug auf Speichernutzung und Leistung initialisieren sollten .

Wie immer ist der Beispielcode auf GitHub verfügbar.