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

Java Discussion :

Problème avec containsAll de HashSet


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut Problème avec containsAll de HashSet
    bonjour tout le monde

    J'ai un petit souçis avec la méthode containsAll de hashSet voilà mon code:

    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
    public HashSet<Regle> decl (HashSet<Fait> X)
     {
     
        HashSet<Regle> regles=new HashSet<Regle>();
     
        for(Regle r:this.lesRegles){
     
         if(X.containsAll(r.getPremisse()))//getPremisse renvoie hashSet<Fait>
                  {
                      Regle r1= new Regle(r.getPremisse(),r.getConclusion());
                      regles.add(r1);
                  }
              }
     
         return regles;
     }
    cette methode marche ne me renvoie rien et pourtant le X existe dans les premisses

    voilà...Merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Bah oui, mais containsAll(), comme sont nom l'indique, vérifie si X contient absolument toutes les prémisses de la règle.
    Pas le contraire.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Bah oui, mais containsAll(), comme sont nom l'indique, vérifie si X contient absolument toutes les prémisses de la règle.
    Pas le contraire.
    Merci thelvin pour ta réponse, et au fait c'est exactement ça ce que je cherche et quand je débuge je vois bien que x est dans premisse mais quand même il rentre pas dans la boucle??!!

  4. #4
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Par défaut
    Citation Envoyé par javast Voir le message
    Merci thelvin pour ta réponse, et au fait c'est exactement ça ce que je cherche et quand je débuge je vois bien que x est dans premisse mais quand même il rentre pas dans la boucle??!!
    Oui mais ta méthode test si premisse est dans X, pas si X est dans premisse.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut
    Citation Envoyé par Mopmop Voir le message
    Oui mais ta méthode test si premisse est dans X, pas si X est dans premisse.
    euh je pense que c'est pareil, non?
    déjà est que que l'ordre compte dans les hashSet, c'est à dire est que
    s.containsAll(l) renvoie true avec s=[A,B,C] et l=[C,B,A]?


    Merci

  6. #6
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par javast Voir le message
    euh je pense que c'est pareil, non?
    Bah pas trop, non.
    A inclut B, et B inclut A, ce sont deux choses bien différentes, en math.

    Citation Envoyé par javast Voir le message
    déjà est que que l'ordre compte dans les hashSet, c'est à dire est que
    s.containsAll(l) renvoie true avec s=[A,B,C] et l=[C,B,A]?
    Il n'y a pas d'ordre dans les HashSet.
    Donc non, et oui.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 148
    Par défaut
    Re

    j'ai une autre question. Est ce que conainsAll compare l'adresse des objets aussi?

    exemple
    s.containsAll(l) sachant que s,l=[A,B]
    mais l'adresse de A,B dans s est differente de celle dans l, est ce que le containsAll renvoie false dans ce cas là?

    Merci d'avance

  8. #8
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2010
    Messages
    119
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 119
    Par défaut
    Je suis pas certain d'avoir compris la question, mais si l'adresse est différente alors ce sont deux objets différents donc il renverra false.

  9. #9
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par javast Voir le message
    j'ai une autre question. Est ce que conainsAll compare l'adresse des objets aussi?
    Pas "aussi," non. Ou bien il compare les adresses seulement, ou bien il compare autre chose que les adresses.

    containsAll() fonctionne comme contains() : il se base sur les méthodes equals() et hashCode() des objets à comparer.
    Si les classes de ces objets ne redéfinissent pas ces méthodes, alors elles héritent de Object.equals() et Object.hashCode(), qui comparent uniquement les adresses des objets. (Plus exactement, qui compare si les deux objets sont en réalité deux références vers un seul et même objet. Il n'y a pas de notion d'adresse.)

    A priori, il faut donc que tu redéfinisses les méthodes equals() et hashCode() dans ta classe Fait, pour que contains() et containsAll() marchent.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. probléme avec HashSet
    Par chebmo1986 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 28/03/2009, 17h47
  2. Problème balise iterate avec la classe HashSet
    Par kokumbo dans le forum Struts 1
    Réponses: 8
    Dernier message: 07/11/2007, 15h43
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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