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 :

ArrayList et objets nuls


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 46
    Par défaut ArrayList et objets nuls
    Bonjour ,

    Je travaille depuis longtemps avec les listes en Java et c'est la premiére fois que je rencontre ce probléme. En fait j'ai créé des objets instanciés d'une classe bien déterminée et je les ajoute à ma liste.

    Dans une autre méthode , j'appelle cette liste et j'essaie de récupérer ses objets mais seulement un objet est disponible ,c 'est comme si la liste ajoute toujours le nouveau objet à l'indice 0 de telle façon qu'il écrase les objets précédents.

    C'est ce que j'essai de faire :
    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
    private List<MaClasse> createList() {
     
            List<MaClasse> list = new ArrayList<MaClasse>();
     
            MaClasse objet1 = new MaClasse();
            objet1.setXXX(val1);
     
            list.add(objet1);
     
            MaClasse objet2 = new MaClasse();
            objet2.setXXX(val2);
     
            list.add(objet2);
     
            MaClasse objet3 = new MaClasse();
            objet3.setXXX(val3);
     
            list.add(objet3);
     
     
            return list;
        }
    Dans une autre méthode , je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    List<MaClasse> list = createList();
     
                                        for(MaClasse obj: list) {
                                            System.out.println(list.indexOf(obj));
                                            System.out.println(obj.getXXX());
                                        }
    J'obtiens deux objets nuls et un seul objet non nul dont l'index est 0 alors que c'est le dernier ajouté à la liste (dans ce cas obj3)

    Merci pour vos réponses !!

  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
    Probablement la méthode equals() de ta classe MaClasse qui fait n'importe quoi.

    List.indexOf() se sert de la méthode equals() de l'objet recherché, en l'appelant sur chaque élément de la List, jusqu'à en trouver un sur lequel ça fait true. C'est un peu l'intérêt de equals() en Java.
    Donc si cette méthode fait n'importe quoi, List.indexOf() fera n'importe quoi aussi.

    Un peu de lecture dans la FAQ concernant equals() : Pourquoi et comment redéfinir la méthode equals() ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Février 2012
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 46
    Par défaut
    Au fait , j'ai essayé de faire du débuggage , maintenant je suis sur qu'à chaque fois que j'exécute la méthode add, le nouveau élément se met en position 0, c'est pour ça que finalement je récupére un seul objet et les autres sont écrasés à chaque fois que j'ajoute un nouveau élément.

    Peux tu m'expliquer pourquoi le nouveau élément ne se met pas dans une nouvelle position ?

  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
    Non, je ne peux pas, c'est totalement invraisemblable.

    - Sûr, tu es. Comment en es-tu sûr ? Ne dis pas "tests de débogage." Dis "Lorsque je regarde <truc> au moment <machin>, il y a <bidule> qui est à valeur <chouette>, alors qu'il devrait se passer <description>. J'en déduis qu'après add(), <description de la déduction>." Quelqu'un qui se retrouve face à un problème en faisant de l'informatique, ça parle comme ça.

    - Peux-tu nous montrer le code complet, avec les imports de List et ArrayList ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre émérite Avatar de Momoth
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2013
    Messages
    318
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2013
    Messages : 318
    Par défaut
    Bonjours a tous,

    Je ne pense pas que l'objet se met réellement à l'indice 0. Tu précises que le programme t'affiches deux objets null et un non-null dont l'indice est 0. Ce qui signifie que ta boucle fait 3 tour et que donc tu as 3 objets dans ta liste.

    Bonne journée.

    -- Momoth --

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 125
    Par défaut
    Est-il possible que ta "MaClasse" soit une sorte de Singleton qui fait pointer la première instance sur la nouvelle?
    Cela expliquerait la position 0 pour ton résultat.

    Pour les NULL, voir comment se débrouille "MaClasse"

    Je ne vois qu'un truc comme ça :O

Discussions similaires

  1. Réponses: 4
    Dernier message: 19/03/2010, 09h31
  2. Réponses: 1
    Dernier message: 14/05/2007, 23h31
  3. comparer des ArrayList d'objets
    Par Empty_body dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/01/2007, 08h26
  4. La fin du For et des ArrayList d'objets ?
    Par Regis.C dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 28/11/2006, 14h46
  5. [C#] Copier un ArrayList d'objets
    Par ahedev dans le forum Windows Forms
    Réponses: 3
    Dernier message: 16/11/2004, 12h14

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