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 :

Recherche un objet dans une liste


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut Recherche un objet dans une liste
    Bonsoir,

    C'est sans aucun doute une question un peu simpliste et je m'en excuse, mais je suis complètement coincé et je n'arrive pas à comprendre la logique de la methode indexOf(Object) de la classe ArrayList.

    j'ai au préalable rempli une collection d'objet par la méthode add et je souhaite dans un deuxième temps vérifier l'existence de cet objet dans la liste.

    Voici mon code:
    Ma classe Main définit une liste de document.
    J'en ajoute un certain nombre dans ma liste et après je vérifie
    si je n'ai pas déjà ajouté un document grâce à la méthode (indexOf)
    Mais là malheureusement, le printf me retourne -1, alors que le contenu
    de l'objet est identique à celui de la liste.
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    List<FileObj> docs = new ArrayList<FileObj>();
    docs.add(new FileObj("toto", ","));
    docs.add(new FileObj("titi", ":"));

    FileObj f = new FileObj("toto", ",");
    int i = docs.indexOf(f);
    System.out.println(" val de i " + i); ///>>>> -1 ???

    }
    Ma classe Document :
    package list;

    public class FileObj {
    private String name;
    private String separator;
    public FileObj(String nam, String sep) {
    name=nam;
    separator=sep;
    }
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public String getSeparator() {
    return separator;
    }
    public void setSeparator(String separator) {
    this.separator = separator;
    }
    D'avance merci
    Emmanuel

  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
    Citation Envoyé par re7bb19 Voir le message
    C'est sans aucun doute une question un peu simpliste et je m'en excuse,
    C'est sûr que ça aurait plus sa place dans la section débutant, mais à part ça, pas besoin de s'excuser, elle est justement là pour ça. J'ai essayé une recherche sur ce thème mais ça n'a pas donné grand-chose, pas de honte à avoir.

    Citation Envoyé par re7bb19 Voir le message
    j'ai au préalable rempli une collection d'objet par la méthode add et je souhaite dans un deuxième temps vérifier l'existence de cet objet dans la liste.
    Pour ça utilise contains(), pas indexOf(). C'est plus simple.
    Le problème sera le même, par contre.


    Citation Envoyé par re7bb19 Voir le message
    Ma classe Document :
    Il faut redéfinir les méthodes equals() et hashCode().
    Voir la FAQ, redéfinir equals() et redéfinir hashCode().

    Voire aussi la JavaDoc de List.contains().
    (Qui se trouve être la même chose que Collection.contains(), c'est normal puisque List étend Collection et que le principe est le même.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    Merci pour tes explications et le lien aussi sur la FAQ,que dans la javaDoc.
    Effectivement, il faut redéfinir la méthode equals pour pouvoir comparer les variables d'instances.
    Encore mille fois merci!!
    emmanuel

  4. #4
    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 re7bb19 Voir le message
    Effectivement, il faut redéfinir la méthode equals pour pouvoir comparer les variables d'instances.
    Et il faut redéfinir hashCode() chaque fois qu'on redéfinit equals().
    C'est vrai que ça ne se voit pas en utilisant une List, mais ça se verrait avec un Set ou une Map, par exemple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Et il faut redéfinir hashCode() chaque fois qu'on redéfinit equals().
    C'est vrai que ça ne se voit pas en utilisant une List, mais ça se verrait avec un Set ou une Map, par exemple.
    Ça se verrait avec un HashSet ou une HashMap, oui ^^ Mais une TreeMap passerait bien, avec le bon comparateur bien sûr.
    Cela dit, on ne sait jamais comment sera utilisée la classe, par qui / quoi, donc ça doit devenir un automatisme : toucher à equals ou à hashcode entraine modifier l'autre aussi (et dans le cas d'un Comparable, mieux vaut aussi vérifier compareTo).

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/08/2009, 20h58
  2. recherche par attribut dans une liste d'objet
    Par Jacobian dans le forum Débuter avec Java
    Réponses: 1
    Dernier message: 28/05/2008, 21h11
  3. Réponses: 15
    Dernier message: 17/01/2008, 17h02
  4. insertion d'objets dans une liste chainee
    Par mathher dans le forum C++
    Réponses: 8
    Dernier message: 20/04/2006, 16h28
  5. [Swing][JList] Placer un Objet dans une liste
    Par Invité dans le forum Composants
    Réponses: 1
    Dernier message: 17/02/2006, 10h31

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