Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di giudf
    Registrato dal
    Jun 2006
    Messaggi
    162

    [Java] Vector() necessario ?!?

    Dunque, ho la seguente struttura dati:

    class entry{
    String email = new String();
    java.util.Date data = new java.util.Date();
    char memorandumId;

    public entry(String address, java.util.Date day, char id){
    data = day;
    email = address;
    memorandumId = id;

    }
    }

    Quando istanzio un oggetto entry, vorrei metterlo in un vettore per poi successivamente pescare gli oggetti ordinati in base alla data.

    Entry VettoreDiEntry[]

    Secondo voi me la posso cavare col suddetto vettore oppure è necessario utilizzare l'oggetto Vector()

    Se devo usare l'oggetto Vector come posso ordinarlo in base alle date ?!? e soprattutto perchè la seguente assegnazione mi da problemi di casting (conversione di tipo) ?!?

    codice:
    entry temp = vettore.elementAt(i);

  2. #2
    Il vector è necessario se vuoi rendere dinamico il vettore, se no se già sai quanto deve venir grosso il vettore puoi usare semplicemente quello, per l'ordinamento del vector ora non ricordo bene ma dovrebbero esserici ordinameni tipo BoubleSort, SelectionSort comunque se cerchi qualcosa trovi ora nnti dico nulla xkè ho paura di portarti fuori strada xò gliela do pur'io un'occhiata xkè mi hai messo curiosità ciao!!
    Emix!!

  3. #3
    Utente di HTML.it L'avatar di giudf
    Registrato dal
    Jun 2006
    Messaggi
    162

    Vector promosso

    Ok 6 stato di aiuto ... ora sò che sono costretto ad usare il vector in quanto le dimensioni del mio vettore sono variabili (nn ero sicuro che in Java il vettore classico era comunque statico anzi qualcuno mi aveva detto il contrario) ... qualche idea su come ordinare il vector in base al campo data ?!?
    Comincio ad avere dei dubbi che ciò sia possibile senza ricorrere ad una qualche soluzione "manuale" !!!

    Grazie

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se già conosci la quantità di oggetti da inserire nel "vettore" allora puoi tranquillamente utilizzare l'array.

    Per poterlo successivamente ordinare, puoi controllare la classe Arrays (java.util) ed i suoi metodi statici sort() (nel caso del Vector devi, però, prima ottenere un array dal Vector stesso, perchè tali metodi lavorano solo su array).

    Il problema del cast è ovvio: Vector è una classe generica che può contenere qualunque tipo di oggetto. Solo tu sai quali oggetti vai ad inserire (non certo il compilatore), quindi quando li andrai ad estrarre dovrai castarli al tipo originario (Vector restituisce, ovviamente, un tipo generico Object):

    Per ottenere il primo elemento
    codice:
    Vector v = new Vector();
    
    v.add( new Entry(...) );
    ...
    
    Entry e = (Entry) v.elementAt(0);
    Per ottenere l'array di oggetti contenuti:
    codice:
    Entry[] entrySet = new Entry[ v.size() ];
    for(int i=0; i<entrySet.length; i++) {
       entrySet[i] = (Entry) v.elementAt(i);
    }
    Per ordinare l'array appena costruito:
    codice:
    Arrays.sort( entrySet );
    Ovviamente ciascuna istanza della classe Entry dovrà essere Comparable (implementare, quindi, tale interfaccia per fornire il metodo di comparazione).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    guard per l'ordinamento delle date io ho trovato un escamotage quando mi è servite inserivo 3 valori diversi unoper gg uno per mese e uno per anno facevo i controlli incrociati a manina e poi li concatenavo in un unica stringa, comunque credo che se usi l'oggetto DATE debba esserci qualcosa guarda sulle api di java sun.
    Ah proposito del vettore statico io per renderlo dinamico gli davo la grandezza con un input da tastiera quindi ogni esecuzione cambiava e diventava una mezza specie dinamico xkè cmq mentra era in esecuzione una volta dato ilvalore quello rimaneva.
    Emix!!

  6. #6
    Utente di HTML.it L'avatar di giudf
    Registrato dal
    Jun 2006
    Messaggi
    162
    Grazie Lele, la tua spiegazione è stata molto esaustiva e credo che sarà quello che poi metterò in pratica, l'unica cosa che non mi è ancora del tutto chiara è:

    In fase di ordinamento che mi hai suggerito
    codice:
    Arrays.sort( entrySet );
    come faccio a fargli capire che l'ordinamento deve basarsi sul campo data ?!?

    GRAZIE !!!!

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Originariamente inviato da giudf
    come faccio a fargli capire che l'ordinamento deve basarsi sul campo data ?!?
    Mi quoto:
    Ovviamente ciascuna istanza della classe Entry dovrà essere Comparable (implementare, quindi, tale interfaccia per fornire il metodo di comparazione).
    E' tale implementazione che ti permette di dirgli come ordinare gli oggetti.

    Oltretutto, se hai degli oggetti di tipo Date o Calendar, l'implementazione diventa più facile perchè tali oggetti mettono a disposizione dei metodi per il loro confronto temporale.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  8. #8
    Utente di HTML.it L'avatar di giudf
    Registrato dal
    Jun 2006
    Messaggi
    162

    Comparable questa sconosciuta

    Sto provando ma nn l'ho proprio mai fatta questa Comparable ne mai sentita nominare, nn so neanche da dove cominciare

    Lele ti chiedo un ultimo favore poi prometto che nn ti rompo + le scatole mi faresti anche un rigo di esempio su come implementare tale interfaccia nel mio caso ?!?

    Cmq per ora ti ringrazio... mi hai tolto un sacco di grane !

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Consiglierei innanzitutto di prevedere un metodo nella classe Entry per ottenere l'oggetto Date in essa contenuto (possibilmente rendendo quest'ultimo privato).

    Dopodichè l'implementazione diventa banale, visto che il confronto fra due Entry si riduce al confronto fra due Date:
    codice:
    public class Entry implements Comparable {
       ...
       public Date getData() { return data; }
    
       public int compareTo(Object obj) {
          Entry e = (Entry) obj;
    
          // Dato che la classe Date implementa già Comparable,
          // fare il confronto tra due date è banalissimo:
          return data.compareTo( e.getData() );
       }
    }
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it L'avatar di giudf
    Registrato dal
    Jun 2006
    Messaggi
    162
    Grande ... ora lo metto in pratica .. Grazie ancora

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.