Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    216

    [JAVA] hashCode() nascondere l'implentazione

    Ho una classe Persona che sovrascrive il metodo hashCode():
    Codice PHP:
    public class Persona
    {
        public 
    int hashCode()
        {
            return 
    nome.hashCode() + 29*cognome.hashCode();
        }

        private 
    String nome;
        private 
    String cognome;

    in un'altra classe Elenco creo una Map in questo modo:
    Codice PHP:
     Map elenco = new HashMap<IntegerPersona>(); 
    che riempio in questo modo:
    Codice PHP:
    elenco.put(new Integer.parseInt(pers.hashCode()), pers); 
    Se ora doto la classe Elenco di un metodo cerca:
    Codice PHP:
    cercaPersona(String nomeString cognome)
    {
        
    int hash =nome.hashCode() + 29*cognome.hashCode();
        
    Persona p elenco.get(new Integer(hash));

    la domanda è: la classe Elenco non dovrebbe conoscere come è implementato il metodo hashCode() di Persona! Dunque come si risolve questo problema di ricerca nella Map?

  2. #2
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Lasciatelo dire, ma tu hai un brutta interpretazione della HashMap....

    In una HashMap devi inserire la coppia (chiave, Oggetto), dove la chiave in genere è una stringa, non un codice di hash. La stringa deve essere solo facile da ricordare o da utilizzare come chiave di ricerca, quindi usare un codice di hash come chiave, non mi sembra certo la soluzione migliore.

    Poi è la HashMap che, quando chiami il metodo get(chiave), converte la chiave (stringa mnemonica) in una chiave di hash e cerca con questa chiave l'oggetto da restituire.

    Decisamente più semplice, no? Ciao!
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    216
    conosco il meccanismo di base della HashMap.. con la mia soluzione non intendevo "dire" alla Map il codice hash da usare.. ma era solo un modo per stabilire una chiave che identificasse in maniera univoca il mio oggetto.

    Qundi dici che come chiave potrei uasare qualcosa del tipo: nome.concat(cognome) ?
    O qual è la soluzione che in genere si adotta in questi casi?

  4. #4
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Visto che pensavi di usare l'hash per avere un identificatore univoco della persona, e visto che l'hash lo calcolavi su nome e cognome, allora anche nome+cognome è una chiave univoca non meno dell'hash, ma decisamente molto più facile da calcolare.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    216
    ... e non necessita nemmeno di sapere come è definito hashCode()

    grazie ancora una volta!

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.