Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    problema con la funzione add() di vector

    Buon giorno a tutti
    sto lavorando con dei vector che contengono oggetti di una classe creata da me, che chiamo Agent.
    Ho un vector di tali oggetti (VECTOR_AGENT), voglio farne una copia (che chiamo AUX), modificare tale copia ed infine ricopiare tutte le modifiche apportate nel vector originale. tanto per chiarire le idee:
    codice:
     
    Vector AUX=new Vector();
    for(i=0;i<VECTOR_AGENT;i++)
      {
      AUX.add(VECTOR_AGENT.get(i));
      }
    Questo, secondo me, dovrebbe copiare tutti gli elementi di VECTOR_AGENT in AUX.
    Fatto questo lancio delle funzioni che mi pacioccano adeguatamente AUX (alcune delle quali rimuovono degli elementi, quindi potenzialmente AUX.size()<VECTOR_AGENT.size()).

    A questo punto vorrei ricopiare AUX in VECTOR_AGENT, per cui faccio:
    codice:
    VECTOR_AUX.clear();
    for(i=0;i<AUX.size();i++)
      {
      VECTOR_AGENT.add(AUX.get(i));
      }
    ora, il compilatore mi dice che è un errore usare add(AUX.get(i)) e mi suggerisce addAll()... ma perchè non posso usare add?
    Poi, se ci sono modi più furbi per fare tutta l'operazione sono disposta a seguire suggerimenti (che saranno quanto mai graditi).
    thanks

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

    Re: problema con la funzione add() di vector

    Originariamente inviato da f.l.bambi
    ora, il compilatore mi dice che è un errore usare add(AUX.get(i))
    Non mi sembra che stai usando i "generics". Se hai un JDK 5 o più, ti segnala dei warning per via di questo.
    O usi i generics o ignori il warning (e se vuoi si può anche "sopprimere" con una apposita annotazione).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    1) bel gatto
    2) non mi dà un warning, proprio un errore
    3) qualche metodo migliore per copiare un vector e ricopiarlo? Non ho capito bene cosa faccia clone, ma ho anche letto versioni contrastanti su diveris forum. E poi: se v ed a sono vector, ed io scrivo v=a, gli sto dicendo di far puntare v ad a? che ne succede delle informazioni salvate in v? Le cancella? (se fosse così per me sarebbe l'ideale!).
    thanks

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da f.l.bambi
    2) non mi dà un warning, proprio un errore
    Beh, allora innanzitutto inizia a postare più codice ... così come l'hai postato non mi dice più di tanto ....
    Posso solo farti notare 2 cose:
    - for(i=0;i<VECTOR_AGENT;i++) è sbagliato, a rigor di logica dovrebbe essere i<VECTOR_AGENT.size()
    - il non rispetto delle convenzioni sulle denominazioni. VECTOR_AGENT sarebbe un nome appropriato per una costante ... non una variabile normale. Anche le denominazioni hanno la loro importanza!!!

    Originariamente inviato da f.l.bambi
    3) qualche metodo migliore per copiare un vector e ricopiarlo?
    addAll() andrebbe bene. Ma anche un semplice ciclo for. Se ti dà errore, dovrei vedere meglio il codice per capire il perché.

    Originariamente inviato da f.l.bambi
    Non ho capito bene cosa faccia clone
    clone() clona la collezione, ovvero ottieni effettivamente una nuova istanza della collezione. Ma la copia è "shallow", cioè NON vengono clonati gli oggetti contenuti. In pratica la nuova istanza ha una copia dei reference e questo vuol dire che entrambe le collezioni, originale e clonata, fanno riferimento agli stessi oggetti!!!

    Originariamente inviato da f.l.bambi
    se v ed a sono vector, ed io scrivo v=a, gli sto dicendo di far puntare v ad a? che ne succede delle informazioni salvate in v?
    Sarebbe molto molto meglio se ti chiarisci bene le idee su queste questioni sui reference che sono praticamente basilari/essenziali!!!
    'v' e 'a' sono dei reference ... il loro valore è un riferimento ad un oggetto (se non è null, chiaramente). Se fai v=a vuol semplicemente dire che hai copiato il riferimento, ovvero 'v' e 'a' fanno ora riferimento allo stesso oggetto. Se prima 'v' faceva riferimento ad un altro oggetto ... ora quell'altro oggetto non sarà più referenziato da 'v' e se questo era l'unico riferimento, l'oggetto finirà appena possibile in pasto al garbage collector.
    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.