Visualizzazione dei risultati da 1 a 10 su 10

Discussione: problemi Vector

  1. #1

    problemi Vector

    se salvo un Vector in un altro Vector secondario perkè le modifiche del primo vanno a finire anke sul seocndo ??
    Insomma, come faccio a separare i due Vector?? renderli indipendenti??

  2. #2
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Spiega "salvo un Vector in un altro Vector secondario" :master:
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: problemi Vector

    Originariamente inviato da Nongiovine88
    se salvo un Vector in un altro Vector secondario perkè le modifiche del primo vanno a finire anke sul seocndo ??
    Insomma, come faccio a separare i due Vector?? renderli indipendenti??
    Cioè??? Cosa intendi? Mettere all'interno di un Vector il riferimento ad un altro Vector?? O Aggiungere tutti gli elementi di un Vector dentro un altro Vector??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    faccio un clone() del vector originale
    oppure assegno un vector originale ad un nuovo Vector con:
    Vector nuovo = new Vector (vecchio);

    se modifico il vecchio mi viene modificato anke il nuovo... perkè?
    come faccio a renderli indipendenti? anche con il clone() mi fa lo stesso scherzo

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Nongiovine88
    faccio un clone() del vector originale
    oppure assegno un vector originale ad un nuovo Vector con:
    Vector nuovo = new Vector (vecchio);

    se modifico il vecchio mi viene modificato anke il nuovo... perkè?
    Se fai clone() ... il clone fa una "shallow-copy". Il Vector è "nuovo", con una struttura dati a sé stante ma i riferimenti agli oggetti sono gli stessi del Vector originale. Entrambi i Vector originale e clonato fanno riferimento agli stessi oggetti.

    Se istanzi un Vector passando un altro Vector, la situazione è la stessa. Hai una nuova struttura dati separata ma gli elementi fanno riferimento agli stessi oggetti referenziati dal primo.

    Se gli oggetti sono "immutabili" non ci sarebbe alcun problema (sono immutabili ....) se invece, come suppongo nel tuo caso, gli oggetti sono "mutabili", se non vuoi che la modifica di un oggetto fatta attraverso il Vector A sia "visibile" anche attraverso il Vector B, allora devi "clonare" gli oggetti contenuti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    cosa intendi per "mutabili" / "non mutabili" ?
    io ho un vettore di elementi di un tipo "libere" con i loro attirbuti all'interno;

    Vector<libere> copia = new Vector <libere>();
    libere ins = aree.elementAt(i);
    copia.addElement(ins);


    come faccio a clonare l'elemento?? il .clone() all'elemento non me lo trova.

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Nongiovine88
    cosa intendi per "mutabili" / "non mutabili" ?
    Un oggetto è "mutabile" quando ha metodi, tipicamente e principalmente setXXX() ma eventualmente anche altri, per modificare il suo "stato" (che poi è l'insieme dei suoi campi di istanza).


    Originariamente inviato da Nongiovine88
    io ho un vettore di elementi di un tipo "libere" con i loro attirbuti all'interno;

    Vector<libere> copia = new Vector <libere>();
    libere ins = aree.elementAt(i);
    copia.addElement(ins);


    come faccio a clonare l'elemento?? il .clone() all'elemento non me lo trova.
    Se non hai messo nella tua classe "implements Cloneable" e implementato clone(), ovviamente non ce l'hai .....

    Vuoi renderlo clonabile nel senso di clone()? Ok, implementalo (ma devi sapere bene come!), altrimenti rendi possibile la "copia" in qualunque altro modo (tramite un altro "tuo" metodo ... tramite costruttore).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    a me servono mutabili...
    infatti ho un vettore di oggeti di un tipo creato tramite una nuova classe "libere" (con vari INT) che devo poter modificare.
    però il nuovo vettore copia lo potrei fare non modificabile ?? cioè tutto il vettore non gli elementi...(una specie di "blocco")?

    cmq a parte questa soluzione forse impossbile...

    volendo clonare un elemento del vettore dovrei fare:
    public static class libere implements Cloneable{
    ...
    }
    poi facendo libere ins = aree.elementAt(i).clone(); NON me lo fa fare...
    però clonando un elemento non avrei lo stesso problema di clonare tutto il Vector? cioè che mi rimane comunque legato all'originale?

  9. #9
    ho visto in un forum che ad un utente è stato consgiliato di fare in questo modo:

    libere originale = gestionememoria.aree.elementAt(i);
    libere nuovaCopia = metodoCheClona(originale);
    copia.add(nuovaCopia);

    dentro a metodoCheClona() cosa dovrei metterci e soprattutto che tipo di funzione sarebbe? non Void...

    mi potete fare un esempio di come si potrebbe implementare questa funzione??

    grazie...

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Nongiovine88
    però il nuovo vettore copia lo potrei fare non modificabile ?? cioè tutto il vettore non gli elementi...(una specie di "blocco")?
    Tecnicamente è possibile avere una lista "non modificabile" usando un wrapper creato da Collections.unmodifiableList(). Ma qui si parla di impedire le modifiche alla struttura della lista (add(), remove(), set() ecc...). Non può certo impedire la modifica dello stato di un oggetto. Se puoi fare un get() (e questo puoi sempre farlo ... altrimenti che lista sarebbe??) allora puoi potenzialmente alterare l'oggetto, se mutabile.
    E quindi unmodifiableList() non è quello che ti interessa.

    Originariamente inviato da Nongiovine88
    poi facendo libere ins = aree.elementAt(i).clone(); NON me lo fa fare...
    Lo ripeto: il clone() lo devi definire tu. Ci vuole molto a capirlo?? Devi metterti lì, scrivere public Object clone() { ....blabla ..... }

    Originariamente inviato da Nongiovine88
    però clonando un elemento non avrei lo stesso problema di clonare tutto il Vector? cioè che mi rimane comunque legato all'originale?
    Se nella nuova collezione metti "copie" degli oggetti, ovviamente è tutto separato.

    Originariamente inviato da Nongiovine88
    libere originale = gestionememoria.aree.elementAt(i);
    libere nuovaCopia = metodoCheClona(originale);
    copia.add(nuovaCopia);

    dentro a metodoCheClona() cosa dovrei metterci
    Fai in modo da istanziare un nuovo oggetto libere ... puoi farlo?? Ovviamente. Devi fare in modo che il nuovo oggetto abbia lo stesso "stato" di quello originale .... puoi farlo? Ovviamente, tramite un costruttore o magari con i metodi setter.

    Originariamente inviato da Nongiovine88
    e soprattutto che tipo di funzione sarebbe? non Void...
    Ovviamente non void .... se deve ritorna un oggetto di tipo 'libere' ... che tipo di ritorno vuoi che abbia?? ... libere!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.