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 :

[Collections][HashMap]Comparer les objets de la hashmap


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut [Collections][HashMap]Comparer les objets de la hashmap
    Salut,
    Je veux conserver pour chaque utilisateur de mon site sa session dans une hashmap (mahashmap.put(user,session).
    Le problème c'est que je veux savoir si un user a déjà une session et quand je fais un test(hashmap.containsKey(user)) sa marche pas même si user est déjà dans la hashmap.
    Comment je fais pour redefinir la méthode de comparaison des objets dans la hashmap? un user à un numero et un pseudo et la comparaison doit se faire sur le numero.

    Merci

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Si tu utilises tes propres classes dans une Map, il faut que tu redéfinnisses correctement les méthode equals(Object) et hashCode()...

    a++

  3. #3
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Merci, mais comment?
    j'ai redéfini la methode equals de la classe user qui implemente l'interface comparable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public boolean [b]equals[/b](Object o1)
    {
          User u = (User)o1;
          if (this.numero.compareToIgnoreCase(u.numero)) return true;
          else return false;
    }
    c'est bon ce code? et je sais pas comment faire pour la methode hashCode(). Est ce qu'il ne faut pas définir la methode compare() aussi?

  4. #4
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    En retournant numero par exemple ou le haschode du nom de l'utilisateur au choix.

  5. #5
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    je ne comprend pas. vous pourriez pas m'envoyer un peu de code? Merci

  6. #6
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /** @inheritDoc
    */
    @Override public int hashCode() {
      return numero;
    }
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    /** @inheritDoc
    */
    @Override public int hashCode() {
      return nickname.hashCode(); // Attention si nickname== null !!!!!!!!!!!!!!!!!!
    }

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 852
    Points : 22 869
    Points
    22 869
    Billets dans le blog
    51
    Par défaut
    Pour etre precis si tu utilises Comparable et si tu as Java 5.0, il te faut ecrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    implements Comparable<User>
     
    ...
     
     
    /** @inheritDoc
     */
    public int compareTo(User o) {
      return o.numero-this.numero;
    }
    Mais je ne suis pas sur qu'il soit necessaire d'implementer Comparable pour les Map (lire la doc).

  8. #8
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Ok, je relis la doc et j'essaie les codes.

  9. #9
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    salut, j'ai essayé ça
    public boolean equals(Object o1)
    {
    User u = (User)o1;
    if (this.numero.compareToIgnoreCase(u.numero)) return true;
    else return false;
    }

    public int hashCode() {
    return Integer.parseInt(numero);
    }
    ça marche, parce que le numero des users est un String composé de 6 chiffres dans mon projet. et si le numéro n'était composé que de lettres comment j'aurais pu procéder sachant que je dois retourner un int dans la methode hashCode()?

    Merci

  10. #10
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par rvfranck
    et si le numéro n'était composé que de lettres comment j'aurais pu procéder sachant que je dois retourner un int dans la methode hashCode()?
    Tout simplement en utilisant la méthode hashCode() de la classe String :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public int hashCode() { 
      return numero.hashCode(); 
    }
    a++

  11. #11
    Membre actif Avatar de vincent63
    Inscrit en
    Octobre 2005
    Messages
    198
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 198
    Points : 205
    Points
    205
    Par défaut
    Si je peux me permettre, et juste pour chipotter un peu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public boolean equals(Object o1){
    if (!(o1 instanceof User))
      return false;
    User u = (User)o1;
    return numero.equals(u.numero);
    }
    La tradition veut que l'on teste toujours le type d'objet passé en paramètre, juste pour ne pas caster en user un truc qui n'en est pas.

    Ensuite, ton test d'égalité repose sur l'égalité d'une chaine de caractères. Comme String a déjà défini equals, autant le réutiliser.

  12. #12
    Membre confirmé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Points : 534
    Points
    534
    Par défaut
    Merci beaucoup.

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

Discussions similaires

  1. [Débutant] Récupérer les valeurs et les clés d'une HashMap
    Par Mobistar dans le forum Collection et Stream
    Réponses: 14
    Dernier message: 29/10/2014, 00h01
  2. Afficher les composants d'une Hashmap
    Par smfrd8 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 03/01/2010, 18h31
  3. comparer les valeurs d'une hashMap
    Par coquero dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 01/11/2009, 14h20
  4. Réponses: 2
    Dernier message: 27/04/2009, 22h23
  5. [HashMap] Modification d'objet d'une Hashtable
    Par viena dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 29/07/2004, 09h04

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