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

API standards et tierces Java Discussion :

HashTable et .containsKey()


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Par défaut HashTable et .containsKey()
    Bonjour,

    J'ai créé une hashTable avec comme Key une classe que j'ai définie. L'API java 5 dit que .containsKey() utilise la fonction equals sur l'object qui sert de clef hors lorsque je réalise des tests, elle ne l'utilise pas (pourtant j'ai correctement overridé la fonction equals de object).
    Est ce que quelqu'un sait d'où pourrait venir mon problème?

    Merci d'avance,
    LDPDC

  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,


    Lorsqu'on redéfini la méthode equals(), il faut redéfinir la méthode hashCode() de manière cohérente.

    En effet la méthode hashCode() permet de faire un premier tri afin d'éviter de comparer tous les objets de la table (c'est le principe même de ce type de collections).

    Pourquoi et comment redéfinir la méthode hashCode() ?


    a++

    PS : A noter que Hashtable fait partie de l'ancienne API. On lui privilégiera HashMap ou un autre type de Map plus spécifique (voir Collections.synchronizedMap() si on a besoin de synchronisation).

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Nos boules de cristal étant momentanément indisponibles, montre donc comment tu as défini la méthode equals et comment tu utilises containsKey, qu'on puisse se faire une idée

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Par défaut
    Désolé, j'avais résolu le problème tout seul et je me rappelais plus avoir posté cette question :s
    Merci beaucoup pour vos réponses en tout cas.

    La FAQ java contient même une question sur le moyen de définir ses hash pour une classe quelconque... (edit: en fait c'était déjà signalé dans la première réponse, pardon)
    Je profite donc de ce topic devenu inutile pour un peu de culture (mathématique) :

    Est ce que quelqu'un peu m'expliquer ou me donner un lien vers une explication de la méthode d'attribution des hash (avec deux nombres impairs etc... telle que définie dans la FAQ)?

Discussions similaires

  1. Hashtable.ContainsKey(Expression régulière) ?
    Par Allan007 dans le forum VB.NET
    Réponses: 9
    Dernier message: 07/02/2012, 14h40
  2. Hashtable.ContainsKey : demande de précisions
    Par hobotalker dans le forum Windows Forms
    Réponses: 3
    Dernier message: 02/12/2008, 16h28
  3. Hashtable.ContainsKey se base sur quoi?
    Par stephane.julien dans le forum C#
    Réponses: 5
    Dernier message: 14/03/2008, 09h16
  4. Hashtable
    Par Gogoye dans le forum C
    Réponses: 5
    Dernier message: 23/09/2003, 16h59

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