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 :

La méthode contains de ArrayList


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2011
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 119
    Par défaut La méthode contains de ArrayList
    Bonjour,

    J'aimerais savoir si l'argument que l'on donne à la méthode contains d'un ArrayList doit être de même type que l'ArrayList ?

    Autrement dit, si j'ai un ArrayList de type Object et que je veux savoir s'il contient un objet qui a un attribut avec une certaine valeur, alors je donne à la méthode contains un entier, bien que mon ArrayList ne soit pas de type entier ?

    Est-ce que cela est faisable ou non ?

    Merci d'avance

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    La méthode contains appelle la méthode equals pour déterminer l'égalité entre tes deux objets.

    Tout dépend donc de l'implémentation de equals pour le type d'objet contenu dans l'ArrayList.

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Bonjour,

    Si je comprends bien, tu as ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public classe MonObjet {
     
        public int monAttribut1;
        public int monAttribut2;
     
        public MonObjet(int _premierAttribut, int _secondAttribut)  {
            monAttribut1 = _premierAttribut;
            monAttribut2 = _secondAttribut;
        }
     
    }
    et tu voudrais que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    MonObjet objet1 = new MonObjet(1,1);
    MonObjet objet2 = new MonObjet(2,1);
    List<MonObjet> listeObjet = new ArrayList<MonObjet>();
    listeObjet.add(objet1);
    listeObjet.add(objet2);
     
    // Ce que tu veux faire, c'est ca ?
    if (listeObjet.contains(1)) {
         // Traitement
    }
    Comment le programme peut/doit savoir à quel attribut tu veux te référer ? Dans l'exemple ici, le "1", ce serait pour le premier ou le second attribut ?

    En outre, la méthode contains() doit, dans ton cas, prendre en argument un objet de même type que celui de ta liste (MonObjet ici). Cette méthode retournera alors vrai si et seulement si (cf. javadoc) la liste contient un objet tel qu'il soit égal à l'objet passé en paramètre, au sens de la méthode equals().

    Donc, pour répondre à ton besoin, il faudrait que :
    • Tu passes un objet à la méthode contains() (de même type que celui de la liste) ;
    • Pour ce type d'objet, tu redéfinisse la méthode equals(), afin de dire que deux objets sont égaux si et seulement si ils répondent à tes critères précis ;


    Attention toutefois en redéfinissant la méthode equals() aux mauvaises surprises...

    Mako.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Equals sauf erreur prend un paramètre de type Object non?

    Donc théoriquement il n'a pas forcément besoin que le paramètre soit de même type, tout dépend de la surcharge de equals.

    Même si bien évidemment il est très déconseillé de faire cela...

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2010
    Messages
    394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2010
    Messages : 394
    Par défaut
    Citation Envoyé par deathness Voir le message
    Equals sauf erreur prend un paramètre de type Object non?
    Oui, tout à fait.

    Citation Envoyé par deathness Voir le message
    Même si bien évidemment il est très déconseillé de faire cela...
    C'est pour ça que j'étais parti directement sur une comparaison entre objets de même type.

    En fait, ce qu'il faudrait faire pour redéfinir la méthode equals() (proprement), c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public boolean equals(Object o) {
        MonObjet objet = (MonObjet) o;
        // On definit quand this et objet sont egaux et on retourne un booleen
    }
    Mako.

  6. #6
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Citation Envoyé par Mako 5013 Voir le message
    En fait, ce qu'il faudrait faire pour redéfinir la méthode equals() (proprement), c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public boolean equals(Object o) {
        MonObjet objet = (MonObjet) o;
        // On definit quand this et objet sont egaux et on retourne un booleen
    }
    J'ajouterais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public boolean equals(Object o) {
       boolean b = false;
       if(o instanceof MonObjet)
       {
           MonObjet objet = (MonObjet) o;
           // On definit quand this et objet sont egaux et on retourne un booleen
          b = ...;
       }
       return b;
    }
    Ca evitera des exceptions de cast

  7. #7
    Membre confirmé
    Inscrit en
    Octobre 2011
    Messages
    119
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 119
    Par défaut
    merci beaucoup pour toutes ces réponses.
    en fait oui je voudrais vérifier si mon arraylist qui est de type objet contient un objet avec une certaine valeur qui est de type entier. en se basant sur ce que vous avez dit apparemment il faut définir la methode equals mais j'ai pas bien compris comment je peut faire ça.

  8. #8
    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
    Bon sang, les aminches, elle est pourtant pas compliquée la question :

    Citation Envoyé par boubounagh Voir le message
    Est-ce que cela est faisable ou non ?
    Faisable, en faisant des odieux bricolages qui se paieront très cher plus tard, oui.
    À faire, non.

    Ne cherche pas à le faire. À la place, fais un parcours de la liste et arrête-toi quand tu trouves un objet qui contient ce qui t'intéresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static boolean containsATrucWhichMachinIs(Collection<? extends Truc> collection, int wantedMachin) {
      for(Truc truc : collection) {
        if(truc.getMachin() == wantedMachin) {
          return true;
        }
      }
      return false; // not found
    }
    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. ArrayList et méthode contains
    Par Lenou dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 29/04/2011, 11h43
  2. ArrayList -> méthode contains() (pour algo de Dijsktra)
    Par Jeff_as_jefferson dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 08/06/2007, 20h09
  3. [C#]Méthode utilisant des arraylist
    Par Cyriusix dans le forum Accès aux données
    Réponses: 6
    Dernier message: 04/05/2007, 09h44
  4. Réponses: 6
    Dernier message: 05/04/2007, 16h34
  5. méthode contains et utilisation
    Par kamos dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 01/11/2006, 21h53

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