dynamische speicherreservierung



  • kann mir bitte einer erklären wie ich in java eine dynamische
    speicherreservierung mache? ich will nicht auf container- oder
    sammlungsklassen zurückgreifen...

    nehmen wir an ich habe folgendes codefragment:

    class Test{
    
        private Bestellung []Bestellungen;
        int index = 0;
    
        void nimmAuf ( Bestellung best )
        {
            /* 1.versuch
                Bestellungen[index] = new Bestellung( best.getBez.......)
                index++;
            */
    
            /* 2.versuch
                Bestellungen = new Bestellung[index+1];
                Bestellungen[index] = new Bestellung( best.getBez.......)
                index++;
            */
        }
    }
    

    funktioniert alles nicht...ich bin am verzweifeln kann mir bitte einer sagen
    wies geht??

    mfg bravo



  • In Java werden alle Objekte auf dem Heap angelegt und dieser wird bei Bedarf auch dynamisch vergrößert. Daher kann ich deiner Fragestellung im Moment keinen Sinn entnehmen? 😕
    Und was genau bedeutet "funktioniert nicht"? Du bist doch ein Programmierer. Du weißt doch, dass "funktioniert nicht" nichts aussagt. 🙂 Erhältst du Compilerfehler? Ergibt sich nicht das gewünschte Verhalten?



  • @optimizer
    naja bei beiden methoden bekomme ich eine "NullPointerException"

    ich erkläre es noch einmal: in der Methode nimmAuf kommen immer wieder
    Bestellungen dazu und diese Bestellungen sollten in einem Array
    gespeichert werden, da ich weder Containerklassen noch ein statisches
    Array benutzen darf, muss ich auf was dynamisches zurückgreifen...

    hab aber keinen plan wie was und wo....

    mfg bravo



  • Bestellungen = new Bestellung[index+1];
                Bestellungen[index] = new Bestellung( best.getBez.......)
                index++;
    

    ist komisch, weil du dann jedesmal ein neues Array anlegst, dort nur ein Element reintust und dann beim nächsten mal das ganze Array wegwirfst und wieder ein neues anlegst.

    Fang doch einfach erst mal klein an, und lege ein Array der Größe 10 an.

    private Bestellung[] bestellungen = new Bestellung[10];
    

    "bestellungen" ist dann ein Zeiger auf ein Array vom Typ Bestellung[] mit Größe 10. Den Index setzen wir genauso wie du erstmal auf 0.

    Dann kann man dein nimmAuf schon fast übernehmen:

    void nimmAuf ( Bestellung best )
    {
        bestellungen[index] = best;  // oder ein anderes Bestellung-Objekt, ich weiß nicht so wirklich, was du hier einfügen willst
        index++;
    }
    

    Sobald das Array voll ist, ist der Index dann bei 10 und es gibt natürlich einen Fehler, wenn du noch ein weiteres Element ablegen willst. Mir ist aber schleierhaft, wo du hier groß was statisches oder dynamisches siehst. Alle Objekte, das Array, die einzelnen Bestellungen werden auf dem Heap und damit in gewisser Weise mit dynamischer Lebenszeit angelegt. Das kann dir jedoch ziemlich egal sein, da Java dir hierbei die Speicherverwaltung komplett abnimmt.



  • Leg dir ein Array fester Größe an und fülle es mit Werten.
    Wenn es voll ist, dann legst du dir ein neues, doppelt so großes Array an und kopierst die alten Daten in das neue Array.



  • Hi

    @Optimizer für mich ist ein Array mit einer vorgegeben grösse in Java schon fast was statisches. Ohne grosses rumkopieren kann ich das array nicht vergrössern. ggf hat sich da ein prof etwas undeutlich ausgedrückt.

    schon mal was von Verketteten listen oder Bäumen (aber nicht die mit den grünen Blätter die im Wald stehen)gehört?

    als vorschlag würd ich eine einfach verkettete liste nehmen.

    so z.B.

    ANKER -> Bestellung5 -> Bestellung4 -> ... -> Bestellung1 -> NULL
    
    weitere Bestellung einfügen.
    
    ANKER -> Bestellung6 -> Bestellung5 -> Bestellung4 -> ... -> Bestellung1 -> NULL
    

    Deine Obj Besetllung benötigt nur einen referenz auf sich selbst. Und deine verwaltungsklasse muss nur den ANKER verwalten, der auf ein Objekt von Typ Bestellung verweist. Nur zum löschen und finden von Bestellungen ist das nicht ganz so optimal. dafür würden sich Bäume besser eignen.

    gruss Termite



  • jo danke mal an alle für diese schnellen antworten..

    ich bin aber zu dem entschluss gekommen, dass es doch besser
    is sammlungs- bzw. containerklassen für so einen fall zu verwenden...

    am besten sind arraylist, hashmap und hashset oder vector....

    mfg bravo


Anmelden zum Antworten