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 :

Récupérer une clef dans un Map


Sujet :

Collection et Stream Java

  1. #1
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut Récupérer une clef dans un Map
    Bonjour,

    J'ai un HashMap qui vérifie .contains(key), mais la classe de key surcharge hashcode. Comment puis-je récupérer la clef qui a été put, qui n'est pas forcément la même que key (mais qui a le même hashcode).
    Suis-je obligé de passer par une itération complète ? Je voudrais une espèce de méthode getEntry(key).

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    HashMap n'utilise pas QUE le hashcode, il utilise aussi la méthode equals. Donc je ne vois pas trop l'intérêt d'aller devoir récupérer la clé si tu l'a déjà passée en paramètre de ton contains, puisque celle que tu passe en paramètre est égale à celle qui est dans la map. Pourquoi tu as besoin de l'autre instance?

  3. #3
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Pourquoi tu as besoin de l'autre instance?
    Je veux vérifier rapidement si un itérable me renvoie systématiquement la même instance (modifiée in-place au moment du next()), ou s'il s'agit d'objets différents. Je stocke ces instances dans une Map en vérifiant si elle y sont déja.

    celle que tu passe en paramètre est égale à celle qui est dans la map
    Je ne crois pas. Si hashcode est surchargé, les 2 clefs ne sont pas les mêmes, c'est justement mon problème (les instances renvoyées par mon itérable ont un content-based hashcode())

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Si les object ne sont pas les même, alors la paire hascode / equals le dira et containsKey retournera false, donc il n'y aura rien à récupérer. Pour la hashmap c'est simple: les objet sont les même ou ils ne le sont pas.

    Si tu ne veux pas utiliser le comportement de hashcode / equals, alors il faut utiliser une IdentityHashMap qui s'assure que les clés sont de la même instance.

    Quand à ton objet, Si a.equals(b) retourne true mais que a n'est pas vraiment égal à b au point que t'as besoin de retrouver a depuis b, alors tu as surtout un problème de design car tu as violé la spec de equals / hashcode.

    Après si t'as besoin de contrôller ds trucs sur les clés, tu peux toujours parcourir le KeySet, mais ce n'est pas très performant surtout si tu le fais pour chaque clé.

    Tu peux aussi faire une Map<Key,Key> pour retrouver la clé d'origine à partir de la clé de départ et mettre cette map à jour à chaque put, mais bon, je crois qu'on part sur du overkill pour un problème qui n'en est pas un.

  5. #5
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    C'est trés clair, merci beaucoup Tchize_ !

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 21/06/2012, 16h13
  2. Réponses: 2
    Dernier message: 11/03/2011, 15h17
  3. [JSTL] Récupérer une valeur dans ma map à l'aide d'une clé
    Par Sim dans le forum Taglibs
    Réponses: 1
    Dernier message: 29/08/2006, 10h03
  4. Réponses: 5
    Dernier message: 09/09/2005, 17h51
  5. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49

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