Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 34
  1. #1
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    Problema con struttura dati

    Ciao a tutti,

    Devo avere una struttura che ha una chiave (univoca) come stringa e come valore un oggetto di nome Pippo contenente una data e stringa.

    Il problema che deve essere ordinato per la data contenuta nell'oggetto Pippo.

    Se è vero che il treemap viene ordinato per chiave e la data è contenuta nell'oggetto come valore allora non posso ordinarlo per data.

    la chiave non può essere cambiato in quanto ci deve essere quel valore che sarebbe un id, al max posso farlo diventare un'oggetto contenente oltre quella stringa con id anche la data ma poi perderei il fattore delle chiave univoche.

    Come posso fare ?
    Che struttura mi consigliate?
    Tony

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

    Re: Problema con struttura dati

    Originariamente inviato da tony83
    al max posso farlo diventare un'oggetto contenente oltre quella stringa con id anche la data ma poi perderei il fattore delle chiave univoche.
    TreeMap ha una struttura ad albero e si basa solo sulla comparazione delle chiavi tramite Comparable/Comparator (a seconda di come viene creato il TreeMap). Non usa equals()/hashCode() della chiave (questo comunque non vuol dire che non li devi implementare ...).

    Se per la chiave decidi di utilizzare un tuo oggetto specifico che contiene id+data, se implementi Comparable e il suo compareTo() e "giochi" bene con la comparazione, puoi fare in modo che il TreeMap non accetti id duplicati ma che tenga le chiavi ordinate per data.
    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 L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    Re: Re: Problema con struttura dati

    Originariamente inviato da andbin
    TreeMap ha una struttura ad albero e si basa solo sulla comparazione delle chiavi tramite Comparable/Comparator (a seconda di come viene creato il TreeMap). Non usa equals()/hashCode() della chiave (questo comunque non vuol dire che non li devi implementare ...).

    Se per la chiave decidi di utilizzare un tuo oggetto specifico che contiene id+data, se implementi Comparable e il suo compareTo() e "giochi" bene con la comparazione, puoi fare in modo che il TreeMap non accetti id duplicati ma che tenga le chiavi ordinate per data.
    Ok come posso fare ?
    Quale strada mi consigli ?
    Come devo fare ?
    Tony

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

    Re: Re: Re: Problema con struttura dati

    Originariamente inviato da tony83
    Ok come posso fare ?
    Quale strada mi consigli ?
    Come devo fare ?
    Ragiona giusto quei 5 o 10 minuti. Immagina di avere il TreeMap con già qualcosa dentro. Fai un put() con una certa chiave. Il TreeMap inizia a navigare nell'albero facendo comparazioni per cercare il posto giusto dove inserire la chiave. Il compareTo() deve restituire <0, =0 o >0 rispettivamente se ka<kb, ka=kb o ka>kb (dove ka è la chiave da inserire e kb una chiave nell'albero).

    Pensaci un attimo e prova a dire come implementeresti compareTo(). Ah, non hai specificato che cosa è la data.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    Re: Re: Re: Re: Problema con struttura dati

    Originariamente inviato da andbin
    Ragiona giusto quei 5 o 10 minuti. Immagina di avere il TreeMap con già qualcosa dentro. Fai un put() con una certa chiave. Il TreeMap inizia a navigare nell'albero facendo comparazioni per cercare il posto giusto dove inserire la chiave. Il compareTo() deve restituire <0, =0 o >0 rispettivamente se ka<kb, ka=kb o ka>kb (dove ka è la chiave da inserire e kb una chiave nell'albero).

    Pensaci un attimo e prova a dire come implementeresti compareTo(). Ah, non hai specificato che cosa è la data.

    Se ka==kb allora faccio restituire 0 cosi non lo inserisce.
    Il contronto poi lo faccio tra date.
    Giusto ?

    Cmq la data è un date.
    Tony

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

    Re: Re: Re: Re: Re: Problema con struttura dati

    Originariamente inviato da tony83
    Se ka==kb allora faccio restituire 0 cosi non lo inserisce.
    Sì ... l'id chiaramente, non la chiave stessa!

    Originariamente inviato da tony83
    Il contronto poi lo faccio tra date.
    Esatto! Con l'unica accortezza che non devi ritornare 0 se le due chiavi hanno data uguale (altrimenti impediresti date uguali anche se con id diversi). Ritorni -1 o +1 ... tanto se le date sono uguali che una stia prima o dopo nell'albero non ti cambia nulla, no?

    Originariamente inviato da tony83
    Cmq la data è un date.
    Allora usa after() o before() (scegli tu il senso).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    Re: Re: Re: Re: Re: Re: Problema con struttura dati

    Originariamente inviato da andbin
    Esatto!

    Esatto! Con l'unica accortezza che non devi ritornare 0 se le due chiavi hanno data uguale (altrimenti impediresti date uguali anche se con id diversi). Ritorni -1 o +1 ... tanto se le date sono uguali che una stia prima o dopo non ti cambia nulla, no?

    Allora usa after() o before() (scegli tu il senso).
    Non so come ringraziarti!..

    ma dal treemap li suoi valori o passo tranquillamente ad un arraylist attraverso il metodo values() giusto ? e posso riassegnare il tutto ad una lista ?
    Tony

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

    Re: Re: Re: Re: Re: Re: Re: Problema con struttura dati

    Originariamente inviato da tony83
    ma dal treemap li suoi valori o passo tranquillamente ad un arraylist attraverso il metodo values() giusto ? e posso riassegnare il tutto ad una lista ?
    values() delle Map ritorna una Collection in cui i valori sono veramente gli stessi oggetti presenti nella map.

    Dipende da cosa devi fare di preciso ... Se vuoi proprio una lista, prendi la Collection dei valori, ne prendi l'array (toArray) e poi usi Arrays.asList() per ottenere un List. Ma mi sembra più lungo (e fumoso).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179

    Re: Re: Re: Re: Re: Re: Re: Re: Problema con struttura dati

    Originariamente inviato da andbin
    values() delle Map ritorna una Collection in cui gli elementi sono veramente gli stessi valori presenti nella map.

    Dipende da cosa devi fare di preciso ... Se vuoi proprio una lista, prendi la Collection dei valori, ne prendi l'array (toArray) e poi usi Arrays.asList() per ottenere un List. Ma mi sembra più lungo (e fumoso).
    OK... grazie per tutto!..
    Tony

  10. #10
    Utente di HTML.it L'avatar di tony83
    Registrato dal
    Feb 2005
    Messaggi
    3,179
    Problema quando compareTo ritorna 0 cmq il put aggiunge lo stesso l'elemento!..
    Perchè ? come faccio ?
    Tony

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.