Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Ich möchte innerhalb einer Klasse ein Array anlegen. Dieses Array soll dann immer wieder um ein Element vergrößert werden. Ich habe mir folgendes überlegt:
Java:
public class UebungenArray{
private int[] array;
....
public void arrayErweitern(int pZahl){
int zahl = pZahl;
int[] temp = new int[array.length+1];
for (int i=0; i<array.length; i++){
temp[i] = array[i];
}
temp[array.length] = zahl;
array = temp;
}
}
Es funktioniert so. Spricht irgendwas gegen die programmierte Methode? Würde es einfacher gehen?
Dagegen spricht erstmal nichts. Für so welche Aufgaben gibts immer tausend verschiedene Wege
Deine for-Schleife zum Umkopieren könnte man z.B ersetzen durch:
Das einzige, dass dagegen spricht wäre die Laufzeit. Du musst jedes Mal alle Elemente durchgehen, um ein einziges Element hinzuzufügen.
Da die Klasse "UebungenArray" weiß ich nicht für was du übst. Falls es Übungen im Hinblick auf Schule/Uni sind und ihr solche Methode implementieren müsst, dann ist das in Ordnung.
Falls du privat übst und generell wissen willst, wie man das normalerweise macht:
Man verdoppelt die Größe des Arrays. Dann hat man nämlich amortisiert konstante Laufzeit für das Einfügen einen Elementes.
Zudem: Diese Idee wurde bereits in der Standard-Lib. umgesetzt: Die ArrayList macht genau das unter der Haube.
Ich möchte aber ungern ArrayList einführen. Und ich würde die Methode zum Anfügen eines Elements auch gerne selber schreiben ohne auf Anderes zurückzugreifen.
Es wurde schon fast alles geschrieben, nur eines noch: int zahl = pZahl; ist überflüssig, denn du kannst am Ende direkt temp[array.length] = pZahl; schreiben.
Was bedeutet amortisiert konstante Laufzeit?
Muss dann nicht auch in ArrayList eine Methode hinterlegt sein, mit der man ein Element hinzufügt? Weißt du wie die Methode abläuft?
Was bedeutet amortisiert konstante Laufzeit?
Muss dann nicht auch in ArrayList eine Methode hinterlegt sein, mit der man ein Element hinzufügt? Weißt du wie die Methode abläuft?
Es wird zusätzlich gespeichert wie viele Elemente in der Liste vorhanden sind. Wenn der der Platz im Array nicht ausreicht wird die Arraygröße verdoppelt und das Element hinzugefügt. Sollte nun ein weiteres Element hinzugefügt werden ist ja schon Platz im Array. Es wird abgespeichert und die Anzahl der Elemente in der Liste erhöht. D.h. "jede Zweierpotenz" = logarithmisch benötigt man für eine Einfügeoperation lineare Laufzeit, alle Einfügeops dazwischen sind konstant. Das ergibt bei dieser Konstellation durchschnittlich = amortisiert konstante Laufzeit.