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??
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??
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
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??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??
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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
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.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 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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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.
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
cosa intendi per "mutabili" / "non mutabili" ?
Se non hai messo nella tua classe "implements Cloneable" e implementato clone(), ovviamente non ce l'hai .....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.
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.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet
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?
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...
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.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")?
E quindi unmodifiableList() non è quello che ti interessa.
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
poi facendo libere ins = aree.elementAt(i).clone(); NON me lo fa fare...
Se nella nuova collezione metti "copie" degli oggetti, ovviamente è tutto separato.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?
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
libere originale = gestionememoria.aree.elementAt(i);
libere nuovaCopia = metodoCheClona(originale);
copia.add(nuovaCopia);
dentro a metodoCheClona() cosa dovrei metterci
Ovviamente non void .... se deve ritorna un oggetto di tipo 'libere' ... che tipo di ritorno vuoi che abbia?? ... libere!Originariamente inviato da Nongiovine88
e soprattutto che tipo di funzione sarebbe? non Void...
Andrea, andbin.dev – Senior Java developer – SCJP 5 (91%) • SCWCD 5 (94%)
java.util.function Interfaces Cheat Sheet — Java Versions Cheat Sheet