IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

redéfinition equals, hashmap et get


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut redéfinition equals, hashmap et get
    Bonjour,
    j'ai une hashmap qui associe un objet à une string.
    Mon objet redéfinit bien la méthode equals mais lorsque je fais un map.get(objet), il me retourne null.
    Pourtant si je fais ce test, j'obtiens bien un true :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for(Iterator <MonObjet> i = tri.keySet().iterator() ; i.hasNext() ; ){
    					System.out.println(autreObjet.equals(i.next()));
    				}

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il faut redéfinir equals() et hashCode() de manière cohérente (voir la FAQ : Pourquoi et comment redéfinir la méthode hashCode() ?)

    hashCode() permet aux Map d'organiser les clefs plus efficacement afin d'éviter d'avoir à comparer toutes les clefs

    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    Merci pour ta réponse.
    Je dois quand même redéfinir hashCode alors qu'il s'agit d'une map d'objet ?
    car je lis dans la faq :
    Pour les objets, on se contentera d'utiliser la méthode hashCode(), ou d'utiliser zéro si la référence est null : (object==null ? 0, object.hashCode())
    Ca n'explique donc pas mon problème...

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par oc_alex86
    Je dois quand même redéfinir hashCode alors qu'il s'agit d'une map d'objet ?
    Tu dois implémenter hahsCode() en particulier pour les objets que tu utilises en tant que clef de la Map...

    Eten général il faudrait toujours que hashCode() soit cohérent avec equals() !

    Citation Envoyé par oc_alex86
    car je lis dans la faq :
    Pour les objets, on se contentera d'utiliser la méthode hashCode(), ou d'utiliser zéro si la référence est null : (object==null ? 0, object.hashCode())
    Cela concerne le calcul de la méthode hashCode() pour un objet, en considérant que les types des attributs utilisés implémentent correctement l'implémentation de la méthode hashCode()...

    Citation Envoyé par oc_alex86
    Ca n'explique donc pas mon problème...
    Soit a et b deux instance de tes objets égaux, tu as :
    mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    a.hashCode() != b.hashCode()
    Et comme les Map se base d'abord sur le hashCode() elle ne retrouve pas tes objets...

    a++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2006
    Messages : 157
    Par défaut
    Merci beaucoup pour ton aide, je viens de comprendre comment ça fonctionnait grâce à la faq que j'avais mal lu ^^

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. hashmap methhode equals
    Par delta07 dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 03/12/2010, 12h24
  2. Redéfinition de equals
    Par robert_trudel dans le forum Débuter avec Java
    Réponses: 18
    Dernier message: 26/05/2008, 14h11
  3. Problème HashMap, HashTable (get)
    Par rune93 dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 15/03/2007, 17h20
  4. HashMap et la fonction get
    Par myspirou dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 09/03/2007, 00h57
  5. Redéfinition de equals
    Par eureka dans le forum Langage
    Réponses: 15
    Dernier message: 21/04/2006, 21h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo