Arrays richtig 'kopieren'/'verlängern'



  • Hey Leutz!
    Hab da mal zwei Fragen zu Arrays in Java:
    1. Wie mache ich aus einem Array zwei _unabhängige_? D.h. also ich will nur den Inhalt eines Arrays in ein anderes übertragen.

    int[] array1=new int[3];
    array1[0]=1;
    array1[1]=2;
    array1[2]=3;
    
    int[] array2=array1;
    //hier WIRD array2 ja richtig zu array1, d.h.
    array2[1]=152;
    //führt ja dazu, dass auch array1[1]=152 ist, denn array1 und 2 sind 
    //ja eigentlich nur Zeiger und zeigen nun auf den gleichen Adressbereich.
    

    Wie krieg ich das nun hin, dasss ich wirklich eine Kopie anfertige, d.h. also

    array2[1]=152;
    

    nur dazu führt, dass array2[1]=152 und nicht gleichzeitig auch noch array1[1]=152? Natürlich könnte man mit Hilfe einer for-Schleife die Inhalte der einzelnen Felder Stück für Stück in ein neues Array übertragen, aber geht das nicht auch einfacher?

    2. Kann ich irgendwie auf einfachem Wege (ohne for-schleife) die Länge eines Arrays um 1 erhöhen? Ich könnte natürlich ein zweites um eins längeres Array erstellen und dann mit Hilfe einer for-Schleife die ersten Felder des neuen Arrays füllen und voila -hätte ich ein um eins längeres Array mit dem Inhalt des ersten... geht das nicht auch einfacher?

    Danke
    -Johann



  • ne, geht nicht unbedingt wirklich einfacher.
    das einzige, was du machen kannst ist die native Methode:

    System.copyArray(...) 
    oder
    System.arrayCopy(...)
    

    oder sowas 🙂
    verwenden, die sind normalerweise schneller.



  • was man natürlich noch besser machen könnte, wäre eine eigene Array-Klasse schreiben, die die Werte erst kopiert, wenn sie verändert werden und ansonsten auf das gleiche Element verweisen...
    Würd mich aber nicht wundern, wenn das System.copy... schon so arbeiten würde, das weiss ich aber nicht genau

    [ Dieser Beitrag wurde am 07.02.2003 um 16:01 Uhr von Ingo aka Desert Hawk editiert. ]



  • Jo, vielen Dank! Die Funktion ist echt perfekt dafür, damit lässt sich dann bei Bedarf ja auch nur ein Teil des Arrays kopieren.

    Die Syntax ist übrigens:

    System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)
    

    MfG
    Johann

    [ Dieser Beitrag wurde am 07.02.2003 um 17:10 Uhr von JSTh editiert. ]



  • danke 🙂


  • Mod

    Aber aufpassen:

    Wenn du ein Array mit Objekten hast und dann das Array mit arraycopy kopierst, dann verweisen array1[0] und array2[0] zum Beispiel auf das selbe Objekt. Die Objekte werden hier also nicht automatisch kopiert, sondern nur die Referenzen. Wenn du ein Objekt in einem Array veränderst, veränderst du das Objekt somit auch in dem anderen Array. ...für primitive Datentypen gilt das aber natürlich nicht. Da führt eine Veränderung in einem Array nicht zu einer Veränderung im anderen Array.

    [ Dieser Beitrag wurde am 07.02.2003 um 18:31 Uhr von Gregor editiert. ]


Anmelden zum Antworten