Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    21

    [Java] chiarimento Vector

    Ciao a tutti.. sono uno studente e ho bisogno di un chiarimento sul Vector. Da quanto ho capito a lezione il vector crea un array di Object. Adesso lo devo utilizzare in una classe ma ho alcuni problemi...
    Devo creare un vector di oggetti di tipo "PAgina" e quindi faccio:
    Vector<Pagina> collezionePagine= new Vector<Pagina>(numeroPagine);
    Dove numeroPagine naturalmente è il numero delle pagine che devo avere ( cioè quando è grande il vettore. Poi inizializzo tutte i suoi componenti cosi:

    codice:
    for (int i = 0; i < numeroPagine; i++) {
    			collezionePagine.insertElementAt(new Pagina(nodi), i);
    		}
    Fino a qui ho fatto qualche errore?
    Poi ho bisogno di un metodo per cambiare gli oggetti nel mio vector e quindi uso

    codice:
    collezionePagine.set(index, new Pagina(nodi));
    Anche questo è giusto vero? secondo java java dovrebbe eliminare quello che c'è in posizione index e sostituirlo con un nuovo oggetto di tipo pagina.

    Arriviamo ora alla cosa che non mi torno. Ho bisogno che il mio vettore possa ingrandirsi di 1. Quindi secondo quando letto in Java dovrei fare

    codice:
    collezionePagine.setSize(numeroPagine+1);
    Giusto? però se vado in debug vedo molti più spazi nuovi creati. Come mai? Il metodo è sbagliato? Come devo fare?
    Se qualcuno è cosi gentile da spiegarmi un pochino sarei molto contento.. grazie..

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

    Re: [Java] chiarimento Vector

    Originariamente inviato da ittaglia
    Da quanto ho capito a lezione il vector crea un array di Object.
    Sì, la sua struttura dati interna è banalmente un Object[].

    Originariamente inviato da ittaglia
    Vector<Pagina> collezionePagine= new Vector<Pagina>(numeroPagine);
    Dove numeroPagine naturalmente è il numero delle pagine che devo avere ( cioè quando è grande il vettore.
    Nota che il valore passato al costruttore è solo la capacità (iniziale), non il numero "logico" di elementi nel Vector.

    Originariamente inviato da ittaglia
    codice:
    for (int i = 0; i < numeroPagine; i++) {
    			collezionePagine.insertElementAt(new Pagina(nodi), i);
    		}
    Fino a qui ho fatto qualche errore?
    Basta un add(oggetto) o addElement(oggetto) (quest'ultimo è il "vecchio" metodo introdotto prima del add) invece che complicarsi la vita con insertElementAt e l'indice.

    Originariamente inviato da ittaglia
    codice:
    collezionePagine.set(index, new Pagina(nodi));
    Anche questo è giusto vero? secondo java java dovrebbe eliminare quello che c'è in posizione index e sostituirlo con un nuovo oggetto di tipo pagina.
    Ok.

    Originariamente inviato da ittaglia
    Arriviamo ora alla cosa che non mi torno. Ho bisogno che il mio vettore possa ingrandirsi di 1. Quindi secondo quando letto in Java dovrei fare

    codice:
    collezionePagine.setSize(numeroPagine+1);
    Giusto? però se vado in debug vedo molti più spazi nuovi creati. Come mai? Il metodo è sbagliato?
    No, è corretto. Il Vector ha aumentato il numero "logico" di elementi di 1 unità (mette un null in quel indice in più). Ma la sua capacità "fisica" è aumentata molto di più. È normale, perché funziona a capacità "espansa". Questo permette di non dover istanziare un nuovo array ad ogni add/insert. Quindi solo ogni tanto istanzia un nuovo array e ricopia i reference dal vecchio al nuovo array e il tempo perso per questo è "ammortizzato" nel tempo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    21
    Innanzi tutto grazie per la tua risposta.
    Però allora mi vengono altre domande.. se faccio cosi:
    codice:
    Vecoto<Pagine>collezionePagine = new Vector<Pagina>(10); collezionePagine.setSize(11); collezionePagine.getsize()
    Il getSize cosa mi restituisce? 11 oppure l'incremento logico? Comunque a me serve:
    Un metodo per cambiare il contenuto di un vector dato un indice: e posso usare set(index, Object) giusto?
    Poi un metodo per prendere un oggetto dato un indice: e uso get(index) giusto?
    E poi un metodo per aumentare i posti e poi per vedere quanto è lungo: e posso usare setsize(num) e getSize() giusto?

    Ultima domanda.. come faccio ad andare a capo nel print?
    mi sembra che il comando sia /n ma dove lo metto?


    codice:
    System.out.println("ciao /n	ciao/n	ciao");
    però non funziona.. devo aver sbagliato qualcosa.
    Grazie mille per la pazienza

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da ittaglia
    Ultima domanda.. come faccio ad andare a capo nel print?
    mi sembra che il comando sia /n ma dove lo metto?
    \n
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ittaglia
    Innanzi tutto grazie per la tua risposta.
    Però allora mi vengono altre domande.. se faccio cosi:
    codice:
    Vecoto<Pagine>collezionePagine = new Vector<Pagina>(10); collezionePagine.setSize(11); collezionePagine.getsize()
    Il getSize cosa mi restituisce? 11 oppure l'incremento logico?
    Con new Vector<Pagina>(10) la capacità "fisica" è 10 ma la dimensione "logica" è 0 (non sono stati aggiunti elementi).

    Il setSize() va a settare la dimensione "logica" degli elementi, che può eventualmente comportare una espansione di capacità fisica (mai un restringimento).

    Se inizialmente capacità fisica=10/dimensione logica=0 e fai setSize(11), il Vector è costretto ad espandere (e come si è detto molto di più) la capacità fisica e a settare la dimensione logica a 11 (l'elemento in più è a null, chiaramente).

    Originariamente inviato da ittaglia
    Comunque a me serve:
    Un metodo per cambiare il contenuto di un vector dato un indice: e posso usare set(index, Object) giusto?
    Sì.

    Originariamente inviato da ittaglia
    Poi un metodo per prendere un oggetto dato un indice: e uso get(index) giusto?
    Sì. O elementAt(indice) (anche questo è il "vecchio" metodo prima della introduzione di List)

    Originariamente inviato da ittaglia
    E poi un metodo per aumentare i posti e poi per vedere quanto è lungo: e posso usare setsize(num) e getSize() giusto?
    Sì.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    21
    Ok grazie mille.. ho tutti gli elementi per continuare il mio progetto!! Non vengo mai deluso da questo forum!!! Grazie mille!!!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.