Wie erweitert man ein Array?

In Java haben Arrays eine feste Größe. Um ein Array zu erweitern, muss zuerst ein zweites, größeres Array angelegt werden, in das die Elemente des kleineren Arrays kopiert werden. Im Anschluss daran wird die Referenz auf das größere Array gesetzt.

Im Folgenden werden drei Implementierungen zur Erweiterung eines Arrays ausgeführt.

1. Implementierung mit einer for-Schleife:
int a[] = { 2, 4, 1, 3 };

int temp[] = new int[2 * a.length];
for (int i = 0; i < a.length; i++) {
    temp[i] = a[i];
}
a = temp;

System.out.println(Arrays.toString(a)); // Ausgabe: [2, 4, 1, 3, 0, 0, 0, 0]
2. Verwendung der Methode arraycopy():

Bei dieser Implementierung wird zum Kopieren der Array-Elemente die Methode arraycopy() der Klasse System verwendet.

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

Diese Methode hat folgende 5 Parameter:

  1. src – Referenz auf das zu kopierende Array
  2. srcPos – Index des ersten Elements von src, das kopiert werden soll
  3. dest – Referenz auf das Ziel-Array
  4. destPos – Index des ersten Elements des Arrays, in das geschrieben werden soll
  5. length – Anzahl der Elemente, die kopiert werden sollen

Beispiel:

int a[] = { 2, 4, 1, 3 };

int temp[] = new int[2 * a.length];
System.arraycopy(a, 0, temp, 0, a.length);
a = temp;

System.out.println(Arrays.toString(a)); 
3. Verwendung der Methode copyOf():

Bei der Implementierung mit der Methode copyOf() der Klasse java.util.Arrays erfolgt das Erzeugen des vergrößerten Arrays und das Kopieren der Daten mit nur einem Methodenaufruf. Intern verwendet diese Methode System.arraycopy().

int a[] = { 2, 4, 1, 3 };
a = Arrays.copyOf(a, 2 * a.length);
System.out.println(Arrays.toString(a));

Bei größeren Datenmengen kann mit der Methode arraycopy() oder copyOf() eine Steigerung der Performanz gegenüber der Verwendung einer for-Schleife erzielt werden. Die Methode arraycopy() ist eine sogenannte native-Methode. Sie wird nicht von der virtuellen Maschine ausgeführt, sondern arbeitet mit Maschinencode für die jeweilige Rechnerarchitektur.