Chiarimento sul metodo HashCode della Classe Object

di il
4 risposte

Chiarimento sul metodo HashCode della Classe Object

Ciao a tutti ! Ho letto la javadoc, ho visto esempi e tutto...ma visto che ho sempre ricevuto risposte semplici e chiare in questo forum vorrei chiedere a cosa serve di preciso il metodo HashCode ?
In quale caso mi può tornare utile ? Perchè sinceramente non riesco a capirne la sua vera utilita! Grazie in anticipo per le risposte!

4 Risposte

  • Re: Chiarimento sul metodo HashCode della Classe Object

    Ci sono diversi utilizzi, comunque uno estremamente importante e quello di poter inserire un Object dentro una collezione basate su HashMap/Hashtable/HashSet/...

    Ogni volta che un oggetto va inserito in una collezione bisogna sempre controllare se sono stati implementati alcuni metodi che dipendono dalla collezione (e che si trova nella documentazione).
  • Re: Chiarimento sul metodo HashCode della Classe Object

    Okei ma se io voglio istanziare una HashMap ad esempio, di tipo Object, posso tranquillamente farlo, e posso mettere dentro la mia "mal" qualsiasi tipo di oggetto, poi mediante instanceof li utilizzo nei vari casi...non capisco che utilità abbia!
  • Re: Chiarimento sul metodo HashCode della Classe Object

    Un'errata implemantazione dei metodi getHashCode e equals fa si che oggetti diversi messi in una coollezione vengano inteepretsti come lo stesso oggetto, oppure viceversa, cioe' l'incapacita' di identificare un oggetto nel set
  • Re: Chiarimento sul metodo HashCode della Classe Object

    SsaLaroLana ha scritto:


    a cosa serve di preciso il metodo HashCode ?
    L'uso direi principale (è stato fatto per quello) è nelle collezioni che internamente sono basate su una "hash-table". Il valore fornito da hashCode() serve alla collezione inizialmente per trovare il "bucket" all'interno della hash-table in cui inserire/trovare un elemento. Nel bucket ci possono essere più valori, tipicamente in una lista linkata, che deve essere scansionata e se si cerca un elemento il confronto è fatto con equals().

    Tra equals() e hashCode() esiste un "contratto" ben preciso. Se si ridefinisce uno, si deve ridefinire anche l'altro. Implementazioni inappropriate che "rompono" il contratto portano a problemi che possono essere: la presenza di "duplicati" nelle collezioni (anche quelle come i Set dove, per concetto, non ci dovrebbero essere duplicati) e/o l'impossibilità di trovare oggetti.
Devi accedere o registrarti per scrivere nel forum
4 risposte