HashCode
tsanta
Messages postés
84
Statut
Membre
-
chfh Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
chfh Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
j´ai un question!peut etre assez stupide mais je ne comprend pas quand on utlise Hashcode().Cette methode apparait tout le temps dans des codes mais je ne comprend pas son sens!java API ne me dis trop de details!
quelqu´un peut donner un code simple avec des commentaire!!!
merci bcp!!!
j´ai un question!peut etre assez stupide mais je ne comprend pas quand on utlise Hashcode().Cette methode apparait tout le temps dans des codes mais je ne comprend pas son sens!java API ne me dis trop de details!
quelqu´un peut donner un code simple avec des commentaire!!!
merci bcp!!!
3 réponses
Bonjour,
la méthode hashCode retourne un entier qui permet à des conteneurs de 'classer' les objets qu'il contient et ainsi de les retrouver plus rapidement. C'est particulier le cas de tous les conteneurs dont le nom commence par 'Hash' (p. ex. HashSet, HashMap, ...). Ces conteneurs peuvent contenir des objets sur lesquels un ordre n'est pas forcément défini (et facile à définir) contrairement aux conteneurs dont le nom commence par 'Tree'.
Selon l'API Java, la méthode hashCode doit respecter les contraintes suivantes :
- le nombre généré (le hashCode) doit rester le même d'un appel à l'autre tant que l'on ne change pas un élément (donnée membre) utilisé par la méthode de comparaison,
- deux objets égaux au sens de la méthode 'equals' doivent retourner le même hashCode.
- deux objets inégaux au sens de la méthode 'equals' peuvent avoir le même hashCode (et c'est pourquoi le hashCode, qui ressemble à un identificateur, n'est est pas un).
Il est important de bien définir cette méthode si l'on désire placer les objets d'une classe dans des conteneurs de manière efficace et performante. Moins il y aura de 'colisions' dans les hashCodes plus rapide seront les opérations sur les conteneurs.
Voilà, j'espère avoir pu vous aider.
Cordialement
la méthode hashCode retourne un entier qui permet à des conteneurs de 'classer' les objets qu'il contient et ainsi de les retrouver plus rapidement. C'est particulier le cas de tous les conteneurs dont le nom commence par 'Hash' (p. ex. HashSet, HashMap, ...). Ces conteneurs peuvent contenir des objets sur lesquels un ordre n'est pas forcément défini (et facile à définir) contrairement aux conteneurs dont le nom commence par 'Tree'.
Selon l'API Java, la méthode hashCode doit respecter les contraintes suivantes :
- le nombre généré (le hashCode) doit rester le même d'un appel à l'autre tant que l'on ne change pas un élément (donnée membre) utilisé par la méthode de comparaison,
- deux objets égaux au sens de la méthode 'equals' doivent retourner le même hashCode.
- deux objets inégaux au sens de la méthode 'equals' peuvent avoir le même hashCode (et c'est pourquoi le hashCode, qui ressemble à un identificateur, n'est est pas un).
Il est important de bien définir cette méthode si l'on désire placer les objets d'une classe dans des conteneurs de manière efficace et performante. Moins il y aura de 'colisions' dans les hashCodes plus rapide seront les opérations sur les conteneurs.
Voilà, j'espère avoir pu vous aider.
Cordialement
merci bcp!!!!
tu peux peut etre donne un exmeple de code!tu peux illustrer avec un exemple stppp!Si je ne demande pas trop!parce ke moi je suis vraiment nulle !Ouais je suis debutante!!
tu peux peut etre donne un exmeple de code!tu peux illustrer avec un exemple stppp!Si je ne demande pas trop!parce ke moi je suis vraiment nulle !Ouais je suis debutante!!
Voici un exemple trouvé sur le net : http://www.geocities.com/technofundo/tech/java/equalhash.html
Dans cet article il est préconisé d'implémenté la méthode hasCode dès que l'on définit la méthode equals ce qui est logique étant donné les contraintes et l'utilisation de hashCode (cf. API de la classe Object de Java). En pratique il m'est régulièrement arrivé de définir equals sans redéfinir hashCode. En pratique je n'utilisais que très rarement les conteneur de type Hash, leur préférant ceux de type Tree (en définissant Comparable ou une classe implémentant Comparator). Cela dépend de l'application. Je vous conseille tout de même de suivre les préconisations de l'article. Pour connaître de bonnes méthodes de hashage il existe des articles sur le net.
Cordialement
Dans cet article il est préconisé d'implémenté la méthode hasCode dès que l'on définit la méthode equals ce qui est logique étant donné les contraintes et l'utilisation de hashCode (cf. API de la classe Object de Java). En pratique il m'est régulièrement arrivé de définir equals sans redéfinir hashCode. En pratique je n'utilisais que très rarement les conteneur de type Hash, leur préférant ceux de type Tree (en définissant Comparable ou une classe implémentant Comparator). Cela dépend de l'application. Je vous conseille tout de même de suivre les préconisations de l'article. Pour connaître de bonnes méthodes de hashage il existe des articles sur le net.
Cordialement