Vector.clone()



  • Ich habe noch nicht ganz verstanden was clone() genau tut.

    Wenn ich einen Vector klone, bekomme ich dann einen zweiten Vektor, also keine Referenz auf den ersten, aber die Elemente im Vektor im Vektor sind noch die selben Referenzen?

    //pseudo
    Vector v1 = (Object1, Object2)
    Vector v2 = v1.clone()
    
    v2.remove(0);
    
    // v1 enthält noch alle elemente... v2 aber nicht
    
    v2 = v1.clone()
    
    v2.get(0).modify()
    
    // Ich verändere Object1 aus beiden Vektoren?
    

    Wenn das so ist, wie kann ich dann eine tiefe Kopie anlegen?
    Selbst drüber iterieren und copy() aufrufen?



  • shisha schrieb:

    Wenn ich einen Vector klone, bekomme ich dann einen zweiten Vektor, also keine Referenz auf den ersten, aber die Elemente im Vektor im Vektor sind noch die selben Referenzen?

    Genau.

    Wenn das so ist, wie kann ich dann eine tiefe Kopie anlegen?
    Selbst drüber iterieren und copy() aufrufen?

    Zum Beispiel. Andere Möglichkeiten sind in http://stackoverflow.com/questions/665860/deep-clone-utility-recomendation beschrieben. Insbesondere die Cloner-Library kannte ich noch gar nicht, klingt aber interessant.



  • shisha schrieb:

    Ich habe noch nicht ganz verstanden was clone() genau tut.

    Wenn ich einen Vector klone, bekomme ich dann einen zweiten Vektor, also keine Referenz auf den ersten, aber die Elemente im Vektor im Vektor sind noch die selben Referenzen?

    //pseudo
    Vector v1 = (Object1, Object2)
    Vector v2 = v1.clone()
    
    v2.remove(0);
    
    // v1 enthält noch alle elemente... v2 aber nicht
    
    v2 = v1.clone()
    
    v2.get(0).modify()
    
    // Ich verändere Object1 aus beiden Vektoren?
    

    Wenn das so ist, wie kann ich dann eine tiefe Kopie anlegen?
    Selbst drüber iterieren und copy() aufrufen?

    In dem du die clone Methode selbst überschreibst.
    Das macht man in so einem Fall, wenn Objekte selsbt noch Referenzen haben, immer so.


Anmelden zum Antworten