Hinzufügen eines Elements zu einem Java-Array gegenüber einer ArrayList

1. Übersicht

In diesem Tutorial werden wir kurz auf die Ähnlichkeiten und Unähnlichkeiten bei der Speicherzuordnung zwischen Java-Arrays und der Standard- ArrayList eingehen . Außerdem erfahren Sie, wie Sie Elemente in ein Array und eine ArrayList einfügen und einfügen .

2. Java Arrays und ArrayList

Ein Java-Array ist eine grundlegende Datenstruktur, die von der Sprache bereitgestellt wird. Im Gegensatz dazu ist ArrayList eine Implementierung der List- Schnittstelle, die von einem Array unterstützt wird und im Java Collections Framework bereitgestellt wird.

2.1. Zugriff auf und Ändern von Elementen

Wir können auf Array-Elemente zugreifen und sie ändern, indem wir die eckige Klammer verwenden:

System.out.println(anArray[1]); anArray[1] = 4;

Auf der anderen Seite verfügt ArrayList über eine Reihe von Methoden, um auf Elemente zuzugreifen und diese zu ändern:

int n = anArrayList.get(1); anArrayList.set(1, 4);

2.2. Feste vs dynamische Größe

Ein Array und die ArrayList weisen beide Heap-Speicher auf ähnliche Weise zu. Was sich jedoch unterscheidet, ist, dass ein Array eine feste Größe hat, während die Größe einer ArrayList dynamisch zunimmt.

Da ein Java-Array eine feste Größe hat, müssen wir die Größe angeben, während wir es instanziieren. Es ist nicht möglich, das Array nach seiner Instanziierung zu vergrößern. Stattdessen müssen wir ein neues Array mit der angepassten Größe erstellen und alle Elemente aus dem vorherigen Array kopieren.

ArrayList ist eine anpassbare Array-Implementierung der List- Schnittstelle. Das heißt, ArrayList wächst dynamisch, wenn Elemente hinzugefügt werden. Wenn die Anzahl der aktuellen Elemente (einschließlich des neuen Elements, das der ArrayList hinzugefügt werden soll ) größer als die maximale Größe des zugrunde liegenden Arrays ist, erhöht die ArrayList die Größe des zugrunde liegenden Arrays.

Die Wachstumsstrategie für das zugrunde liegende Array hängt von der Implementierung der ArrayList ab . Da die Größe des zugrunde liegenden Arrays jedoch nicht dynamisch erhöht werden kann, wird ein neues Array erstellt und die alten Array-Elemente werden in das neue Array kopiert.

Die Additionsoperation hat konstante amortisierte Zeitkosten. Mit anderen Worten, das Hinzufügen von n Elementen zu einer ArrayList erfordert O (n) Zeit.

2.3. Elementtypen

Ein Array kann je nach Definition des Arrays sowohl primitive als auch nicht primitive Datentypen enthalten. Doch ein Arraylist kann nur nicht-primitive Datentypen enthalten .

Wenn wir Elemente mit primitiven Datentypen in eine ArrayList einfügen , konvertiert der Java-Compiler den primitiven Datentyp automatisch in die entsprechende Objekt-Wrapper-Klasse.

Schauen wir uns nun an, wie Elemente in Java-Arrays und in der ArrayList angehängt und eingefügt werden .

3. Ein Element anhängen

Wie wir bereits gesehen haben, haben Arrays eine feste Größe.

Um ein Element anzuhängen, müssen wir zunächst ein neues Array deklarieren, das größer als das alte Array ist, und die Elemente aus dem alten Array in das neu erstellte Array kopieren. Danach können wir das neue Element an dieses neu erstellte Array anhängen.

Schauen wir uns die Implementierung in Java an, ohne Dienstprogrammklassen zu verwenden:

public Integer[] addElementUsingPureJava(Integer[] srcArray, int elementToAdd) { Integer[] destArray = new Integer[srcArray.length+1]; for(int i = 0; i < srcArray.length; i++) { destArray[i] = srcArray[i]; } destArray[destArray.length - 1] = elementToAdd; return destArray; }

Alternativ bietet die Arrays- Klasse eine Dienstprogrammmethode copyOf () , mit der Sie ein neues Array mit größerer Größe erstellen und alle Elemente aus dem alten Array kopieren können:

int[] destArray = Arrays.copyOf(srcArray, srcArray.length + 1);

Sobald wir ein neues Array erstellt haben, können wir das neue Element einfach an das Array anhängen:

destArray[destArray.length - 1] = elementToAdd;

Andererseits ist das Anhängen eines Elements in ArrayList ganz einfach :

anArrayList.add(newElement);

4. Einfügen eines Elements in den Index

Das Einfügen eines Elements an einem bestimmten Index ohne Verlust der zuvor hinzugefügten Elemente ist in Arrays keine einfache Aufgabe.

Wenn das Array bereits die Anzahl der Elemente enthält, die seiner Größe entsprechen, müssen wir zunächst ein neues Array mit einer größeren Größe erstellen und die Elemente in das neue Array kopieren.

Außerdem müssen wir alle Elemente, die nach dem angegebenen Index stehen, um eine Position nach rechts verschieben:

public static int[] insertAnElementAtAGivenIndex(final int[] srcArray, int index, int newElement) { int[] destArray = new int[srcArray.length+1]; int j = 0; for(int i = 0; i < destArray.length-1; i++) { if(i == index) { destArray[i] = newElement; } else { destArray[i] = srcArray[j]; j++; } } return destArray; }

Die ArrayUtils- Klasse bietet jedoch eine einfachere Lösung zum Einfügen von Elementen in ein Array :

int[] destArray = ArrayUtils.insert(2, srcArray, 77);

Wir müssen den Index angeben, an dem wir den Wert, das Quellarray und den einzufügenden Wert einfügen möchten.

Die insert () -Methode gibt ein neues Array zurück, das eine größere Anzahl von Elementen enthält, wobei sich das neue Element am angegebenen Index befindet und alle verbleibenden Elemente um eine Position nach rechts verschoben sind.

Beachten Sie, dass das letzte Argument der Methode insert () ein variables Argument ist, sodass wir eine beliebige Anzahl von Elementen in ein Array einfügen können.

Verwenden wir es, um drei Elemente in srcArray einzufügen, beginnend mit Index zwei:

int[] destArray = ArrayUtils.insert(2, srcArray, 77, 88, 99);

Die restlichen Elemente werden um drei Stellen nach rechts verschoben.

Darüber hinaus kann dies für die ArrayList trivial erreicht werden :

anArrayList.add(index, newElement);

ArrayList verschiebt die Elemente und fügt das Element an der gewünschten Stelle ein.

5. Schlussfolgerung

In diesem Artikel haben wir uns Java Array und ArrayList angesehen . Darüber hinaus haben wir die Ähnlichkeiten und Unterschiede zwischen den beiden untersucht. Schließlich haben wir gesehen, wie Elemente in ein Array und eine ArrayList angehängt und eingefügt werden .

Wie immer ist der vollständige Quellcode der Arbeitsbeispiele auf GitHub verfügbar.