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

avec Java Discussion :

Utilisation d'un HashSet


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 14
    Points : 9
    Points
    9
    Par défaut Utilisation d'un HashSet
    Bonjour,

    Je voulais utiliser une collection d'objets de type Animal (classe que j'ai créée) et j'ai choisi un HashSet parce que je ne voulais pas de doublons. J'ai redéfini la méthode equals pour que deux animaux soient égaux si ils ont le même nom mais j'ai toujours des doublons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public class Animal {
     
      public String nom;
      public int poids;
     
      public Animal(String nom, int poids) {
        this.nom = nom;
        this.poids = poids;
      }
     
      @Override
      public String toString() {
        return "Je suis "+ nom+ " et je pèse "+poids+"kg.";
      }
     
      @Override
      public boolean equals(Object obj) {
        if (obj instanceof Animal) {
          Animal a = (Animal) obj;
          if (a.nom.equalsIgnoreCase(nom)) {
            return true;
          }
        }
        return false;
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    import java.util.*;
    public class TestAnimal {
      public static void main(String args[]){
        Set<Animal> tab = new HashSet<Animal>();
        tab.add(new Animal("tortue", 355));
        tab.add(new Animal("lion", 25));
        tab.add(new Animal("ornithorynque", 87));
        tab.add(new Animal("tortue", 10));
     
        System.out.println(tab);
     
        for (Animal a : tab) {
          System.out.println(a);
        }
      }
    }
    Quand j'exécute mon code, j'obtiens ça:

    [Je suis lion et je pèse 25kg., Je suis tortue et je pèse 355kg., Je suis ornithorynque et je pèse 87kg., Je suis tortue et je pèse 10kg.]
    Je suis lion et je pèse 25kg.
    Je suis tortue et je pèse 355kg.
    Je suis ornithorynque et je pèse 87kg.
    Je suis tortue et je pèse 10kg.

    J'espère que vous pourrez m'aider.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    C'est la méhtode hashCode() qu'il faut redéfinir sur la base de ton nom, par exemple comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        @Override
        public int hashCode()
        {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((nom == null) ? 0 : nom.hashCode());
            return result;
        }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 14
    Points : 9
    Points
    9
    Par défaut
    Merci pour ta réponse.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Euh, pas "c'est la méthode hashCode() qu'il faut redéfinir".

    Il faut redéfinir les deux quand on en redéfinit une, hashCode() et equals().

    Il est possible pour des objets différents d'avoir le même hash code, et dans ce cas c'est equals() qui tranche.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Il faut redéfinir les deux quand on en redéfinit une, hashCode() et equals().
    Autant pour moi... effectivement, les 2
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. probleme d'utilisation d'un hashset
    Par klem02 dans le forum C#
    Réponses: 2
    Dernier message: 15/02/2010, 13h11
  2. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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