Länge eines Arrays verlängern

1. Übersicht

In diesem Tutorial werden wir uns die verschiedenen Möglichkeiten ansehen, wie wir ein Java-Array erweitern können.

Da Arrays ein zusammenhängender Speicherblock sind, ist die Antwort möglicherweise nicht ohne weiteres ersichtlich, aber packen wir das jetzt aus.

2. Verwenden von Arrays.copyOf

Schauen wir uns zunächst Arrays.copyOf an . Wir kopieren das Array und fügen der Kopie ein neues Element hinzu:

public Integer[] addElementUsingArraysCopyOf(Integer[] srcArray, int elementToAdd) { Integer[] destArray = Arrays.copyOf(srcArray, srcArray.length + 1); destArray[destArray.length - 1] = elementToAdd; return destArray; }

Die Art und Weise Arrays.copyOf funktioniert , ist , dass es das nimmt srcArray und Kopien die Anzahl der angegebenen Elemente in der Länge Argumente in ein neues Array , die es intern erzeugt. Die Größe des neuen Arrays ist das Argument, das wir liefern.

Zu beachten ist, dass Arrays.copyOf die zusätzlichen Elemente im Zielarray mit null füllt , wenn das Längenargument größer als die Größe des Quellarrays ist .

Je nach Datentyp ist das Verhalten der Füllung unterschiedlich. Wenn wir beispielsweise primitive Datentypen anstelle von Integer verwenden, werden die zusätzlichen Elemente mit den Nullen gefüllt. Im Fall von char , Arrays.copyOf wird zusätzliche Elemente mit füllt null und bei boolean, mit falsch .

3. Verwenden von ArrayList

Als nächstes betrachten wir ArrayList.

Wir konvertieren zuerst das Array in eine ArrayList und fügen dann das Element hinzu. Dann konvertieren wir die ArrayList zurück in ein Array :

public Integer[] addElementUsingArrayList(Integer[] srcArray, int elementToAdd) { Integer[] destArray = new Integer[srcArray.length + 1]; ArrayList arrayList = new ArrayList(Arrays.asList(srcArray)); arrayList.add(elementToAdd); return arrayList.toArray(destArray); }

Beachten Sie, dass wir das srcArray übergeben haben, indem wir es in eine Sammlung konvertiert haben . Die srcArray wird die zugrunde liegende Array in der bevölkern Arraylist .

Außerdem ist zu beachten, dass wir das Zielarray als Argument an Array übergeben haben . Diese Methode kopiert das zugrunde liegende Array in das destArray .

4. Verwenden von System.arraycopy

Zum Schluss werfen wir einen Blick auf System.arraycopy , das Arrays.copyOf ziemlich ähnlich ist :

public Integer[] addElementUsingSystemArrayCopy(Integer[] srcArray, int elementToAdd) { Integer[] destArray = new Integer[srcArray.length + 1]; System.arraycopy(srcArray, 0, destArray, 0, srcArray.length); destArray[destArray.length - 1] = elementToAdd; return destArray; }

Eine interessante Tatsache ist, dass Arrays.copyOf diese Methode intern verwendet.

Hier können wir feststellen, dass wir die Elemente vom srcArray nach destArray kopieren und dann das neue Element zum destArray hinzufügen .

5. Leistung

Allen Lösungen ist gemeinsam, dass wir auf die eine oder andere Weise ein neues Array erstellen müssen. Der Grund dafür liegt in der Zuordnung von Arrays im Speicher. Ein Array enthält einen zusammenhängenden Speicherblock für eine superschnelle Suche, weshalb wir die Größe nicht einfach ändern können.

Dies hat natürlich Auswirkungen auf die Leistung, insbesondere bei großen Arrays. Aus diesem Grund wird ArrayList zu viel zugewiesen, wodurch die Häufigkeit, mit der die JVM Speicher neu zuweisen muss, effektiv reduziert wird.

Wenn wir jedoch viele Einfügungen vornehmen , ist ein Array möglicherweise nicht die richtige Datenstruktur, und wir sollten eine LinkedList in Betracht ziehen .

6. Fazit

In diesem Artikel haben wir die verschiedenen Möglichkeiten zum Hinzufügen von Elementen am Ende eines Arrays untersucht.

Und wie immer ist der gesamte Code auf GitHub verfügbar.