Was ist der Unterschied zwischen Array und dynamischem Array?

6 Antworten

Zweiter Versuch - diesmal mit Java (geht aber auch in anderen Sprachen).

Wenn man einen Array haben will, den man nachträglich größer oder kleiner machen möchte, muss man zwischen der logischen und der tatsächlichen Größe eines unterliegenden Containers unterscheiden.

Man definiert z.B. eine Klasse (oder Structur) mit 2 Instanzvariablen. Einem Array (sagen wir der Größe n) sowie einer Integer, die die logische Größe hält (sz).

Am Anfang ist sz = 0. Man definiert neben den get(idx) und set(idx, val) Methoden, zusätzlich eine add(val) Methode, die die logische Größe sz um eins erhöht, gegebenenfalls einen neuen unterliegenden Container alloziert, und die Elemente umkopiert, falls sz die tatsächliche Größe erreicht hat, und das neue Element an Position sz ablegt.

Typischerweise wird überalloziert, d.h. der Array wird 1,5 oder 2fach so groß alloziert, damit man nicht bei jedem einzelnen add() diesen relativ teurenVorgang durchführen muss. (Tpischerweise verdoppelt, womit man mit C*log(n) resize Operationen aus).

ok, auf Anfrage hier ein Stück Pseudocode (nicht aus einer Java IDE, sondern einfach so reingetippt - ist also möglicherweise syntaktisch nicht korrekt...):

class MyDynamicArray {
    private static INITIALSIZE = 10;
    private Object[] realArray = new Object[ INITIALSIZE ];
    public int length = 0;

    public Object get(int idx) {
        return realArray[idx];
    }

    public void set(int idx, Objet newVal) {
        realArray[idx] = newVal;
    }

    private void growArray() {
        Object[] newArray = new Object[ realArray.length * 2 ];
        System.arraycopy(realArray, 0, newArray, 0, realArray.length);
        realArray = newArray;
    }

    public void add(Object newElement) {
        if (length == realArray.length) {
            growArray();
        }
        realArray[ length++ ] = newElement;
    }
}

in etwa so könnte ein dynamischer Array implementiert sein...
braucht vielleicht noch mehr (remove(idx), toString() usw.) aber im Prinzip sollte es so tun.

0

Die Angabe einer Programmiersprache wäre nützlich - es gibt nämlich auch solche, bei denen alle Arrays dynamisch sind (Scheme, Java, Smalltalk)...
Und es gibt solche, bei denen es gar keine dynamischen gibt (Fortran)!

Vermutlich willst Du was über C/C++ wissen?

Da geht es um malloc/calloc vs. statische bzw. lokal auf dem Stack mit fester Größe allozierte Arrays.

Konkret (fixe Größe):

main() {
    char *charPtrArray[100];
    int integerArray[50];
    float floatArray[1000];
    ...
}

vs. (dynamische Größe)

main() {
    char **charPtrArray = (char **)malloc( sizeof(char *) * 100 );
    int *integerArray = (int *)malloc( sizeof(int) * 50 );
    float *floatArray = (float *)malloc( sizeof(float) * 1000);
    ...
}

auch:

int size = 1000; // berechnete Größe
float *floatArray = (float*)malloc( sizeof(float) * size );

In vielen Sprachen (Libraries) gibt es auch Datentypen, die sich nach dem Anlegen noch vergrößern/verkleinern lassen. Vielleicht meinst Du auch das. Das ist aber besonders abhängig von der verwendeten Sprache und eventuell auch der Bibliotheken (C++).

hilft das weiter?

Die Angabe einer Programmiersprache wäre nützlich -

In den Schlagworten steht Java. Aber so langsam hab ich mich auch dran gewöhnt Rätselraten um die Programmiersprache zu machen :D:D

1
@Omnivore08

oh, das habe ich wohl übersehen (oder kam es später?).
Dann ist meine Antwort unnütz... ;-(

1
@sarahj

wäre super wenn du ein beispiel für java hast :D

1

Ein Array heißt dynamisch, wenn man seine Länge (d.h. die Zahl der Speicherplätze, aus denen es besteht) auch während es im Gebrauch ist, noch vergrößeren oder verkleinern kann.

Für alle anderen Arrays - man nennt sie statische Arrays - liegt ihre Länge fest, noch bevor das Programm compiliert wird: Der Programmierer hat sie dann im Code fest vorgegeben.

C# mehrere Max Werte aus Array ausgeben

Hey, Community! Ich hätte eine Frage: Ich habe in einem dynamischen eindimensionalen Array mehrere Zufallszahlen ablegen lassen. Am Schluss will ich den Höchstwert ausgeben lassen. Dies habe ich auch geschafft. Nu leider weiß ich nicht, wie die Höchstwerte ausgeben lassen soll, falls es mehrere gleich große Höchstwerte im Array gibt.

Danke schon im Vorraus!

...zur Frage

JavaScript doppelte Werte in einem Array?

Hallo zusammen, Nur eine kurze JS Frage, zu der ich jedoch kurioserweise keine für mich einfache Antwort finde ^^. Ich würde gerne eine Funktion in JS erstellen, die in einem Array nach doppelten Werten der Variabeln sucht und diese dann möglichst zurückgibt.

    var x = [1, 3, 2, 3, 4]; //Jetzt müsste die Funktion 3 zurückgeben

Wie wäre dies am einfachsten zu bewältigen? Tut mir leid, ich bin echt noch ein Anfänger (: Vielen Dank!

...zur Frage

Java Konsole leeren

Hey, ich möchte in meinem Java Programm in Eclipse, welches bis jetzt nur in der Konsole ausgegeben wird, aber auch Strings und Ähnliches enthält, die Konsole leeren, jedoch habe ich nirgendwo gefunden, wie das gehen soll.

Vielen Dank schon im Vorraus, Clapto

...zur Frage

Was ist in Java der Unterschied zwischen einem Array und einer ArrayList?

Ich weiß nur, dass man in einem Array mehrere Zeichen speichern kann aber eine ArrayList?

...zur Frage

Was ist der Unterschied zwischen Attribut und Objekt einer Klasse/Java?

Vielen Dank im Voraus.

Man redet immer von Objekten, aber was ist das? Sind das einfach meine Methoden bzw. set- und get Methoden?

...zur Frage

Unterschied zwischen statischem und dynamischem Druck

Hallo,

kann mir jemand anschaulich den Unterschied zwischen statischem und dynamischem Druck erklären (Aufgabe WIndkanaldüse)

...zur Frage

Was möchtest Du wissen?